wait
指定 jobspec 或者进程 ID
wait [options] ID
ID 表示进程或者 job 的 id,若没有提供该参数,wait 将等待所有的后台任务完成。并且返回最后一个命令的状态(exit status)。
- 进程 ID 比如:
wait 7654
等待进程 7654 退出。如果制定多个 process ID,那么 wait 将等待所有进程退出。
- jobspec
什么是 jobspec?可以使用 jobspec 来指定正在运行的某个 Job。jobspec 以百分号开始。
比如:
rsync -a /home /tmp/home &
shell 将输出如下: [2] 54377
此时可以使用如下方式等待该任务完成。
wait %2
-n
- 使用 -n 加上 pids 使用 -n 选项,将等待指定的 job 中的,任意一条 job 退出,并且返回其退出的 staus code(谁最先就返回谁)。
wait -n 45432 54346 76573
- 使用 -n 不加任何选项 等待任意的后台 job 退出,并且返回其 exit status(第一个退出该阻塞就停止)。
-p 选项
当我们使用 -n 时,存在一个问题就是不知道退出的是哪一个进程。它只返回了job 的 exit status。 所以这个时候就可以接触 -p 选项。
wait -p job_id -n 45432 54346 76573
示例
- wait 知道 process id
#!/bin/bash
sleep 30 &
process_id=$!
echo "PID: $process_id"
wait $process_id
echo "Exit status: $?"
- wait 添加 -n 和不加任何选项
#!/bin/bash
sleep 3 &
sleep 30 &
sleep 5 &
wait -n
echo "First job completed."
wait
echo "All jobs completed."
该脚本执行时,会在后台生成三个进程,wait -n等待第一个进程结束,wait 等待所有的后台任务完成。