我正在编写一个Shell脚本以在后台运行各种进程。我想知道如何等待脚本的执行,直到所有后台进程(并行运行)都已完成。
#!/usr/bin/env bash
ARRAY='cat bat rat'
for ARR in $ARRAY
do
./run_script1 $ARR &
done
P1=$!
wait $P1
echo "INFO: Execution of all background processes in the for loop has completed.."
在这里,我使用了变量$!
,该变量给出了最后一个后台命令的进程号,但是我希望每个并行运行的后台命令的进程号。
如何实现?
答案 0 :(得分:2)
如果您要等待所有孩子,则不需要知道他们的pid,只需不带参数调用wait
。
来自wait --help
:
如果未提供ID,则等待所有当前活动的子进程,并且返回状态为零。
但是如果出于某种原因要列出所有子项的pid,则可以使用:
jobs -p