侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux wait命令教程:轻松理解进程之间的等待关系(附案例详解和注意事项)

Linux wait命令介绍

wait(等待)命令用于等待后台进程的完成。它会暂停当前 shell 的执行,直到指定的进程或作业完成为止。这个命令通常与后台运行的进程或作业一起使用,以确保在继续执行其他命令之前等待它们的完成。

Linux wait命令适用的Linux版本

wait命令在所有主流的Linux发行版中可用,包括但不限于Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian等。

Linux wait命令的基本语法

wait命令的语法格式如下:

wait [进程ID或作业ID...]

Linux wait命令的常用选项或参数说明

下表列出了wait命令的常用选项和参数:

选项/参数描述
进程ID或作业ID指定要等待的进程或作业的ID。如果未指定任何ID,则wait命令将等待当前 shell 中的所有后台进程或作业完成。

Linux wait命令实例详解

实例1:等待单个进程完成

sleep 5 &
wait $!
echo "进程已完成"

解释:

  • sleep 5 & 启动一个后台进程,它会等待5秒钟。
  • wait $! 等待最近启动的后台进程(使用$!获取其进程ID)完成。
  • echo "进程已完成" 当进程完成后,输出一条消息。

实例2:等待多个进程完成

sleep 3 &
sleep 6 &
wait
echo "所有进程已完成"

解释:

  • sleep 3 &sleep 6 & 启动两个后台进程,分别等待3秒和6秒。
  • wait 等待当前 shell 中的所有后台进程完成。
  • echo "所有进程已完成" 当所有进程完成后,输出一条消息。

实例3:等待特定进程组完成

# 创建一个进程组
sleep 4 &
sleep 7 &
sleep 10 &

# 获取进程组ID
PGID=$(ps -o pgid= $$)

# 等待进程组完成
wait -- -"$PGID"
echo "进程组已完成"

解释:

  • sleep 4 &sleep 7 &sleep 10 & 启动三个后台进程,分别等待4秒、7秒和10秒。
  • ps -o pgid= $$ 用于获取当前 shell 的进程组ID。
  • wait -- -"$PGID" 使用--标志来确保"$PGID"被解释为负值的进程组ID,等待进程组中的所有进程完成。
  • echo "进程组已完成" 当进程组中的所有进程完成后,输出一条消息。

实例4:等待作业完成

# 启动一个作业
sleep 8 &

# 将作业放到后台运行
bg

# 等待作业完成
wait %1
echo "作业已完成"

解释:

  • sleep 8 & 启动一个后台进程,等待8秒。
  • bg 将最近启动的作业(使用%1表示)放到后台运行。
  • wait %1 等待作业(使用%1表示)完成。
  • echo "作业已完成" 当作业完成后,输出一条消息。

Linux wait命令的注意事项

  • 如果您遇到 bash: wait: pid XXXX is not a child of this shell 的错误,请确保指定的进程ID是当前 shell 的子进程。
  • 注意,wait命令只能等待后台进程或作业的完成,无法等待前台运行的命令完成。
  • wait命令的参数可以是进程ID或作业ID,进程ID可以通过$!获取,作业ID可以通过%N获取,其中N为作业的序号。
0

评论区