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为作业的序号。
评论区