Linux:在另一个进程终止时启动特定操作

时间:2017-12-29 12:48:24

标签: linux bash shell

我有一个脚本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

1 个答案:

答案 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

我在完成后还添加了后台进程$?的退出代码,以便可以调试任何异常退出。