我有一个脚本foo.sh
,在这样的背景下启动bfoo.sh
的5个过程:
for i in {1..5}
do
./bfoo.sh &
done
wait
echo ok
我这样使用它:
./foo.sh
在for循环之后的foo.s
中,我想做一些事情,比如每个进程bfoo.sh
终止了
echo $PID_Terminated
要实现这一点,您需要存储bfoo.sh
的每个后台进程的PID。 $!
包含最后由shell背景化的进程ID。我们一次将它们附加到数组中并稍后迭代它
请记住,这会依次运行您的后台进程,因为您在每个进程ID上分别有wait
。
#!/usr/bin/env bash
pidArray=()
for i in {1..5}; do
./bfoo.sh &
pidArray+=( "$!" )
done
现在等待每个进程并循环
for pid in "${pidArray[@]}"; do
wait "$pid"
printf 'process-id: %d finished with code %d\n' "$pid" "$?"
done
我完成后还添加了后台进程$?
的退出代码,以便可以调试任何异常退出。