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