我有一个脚本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
答案 0 :(得分:2)
要实现此目的,您需要存储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
我在完成后还添加了后台进程$?
的退出代码,以便可以调试任何异常退出。