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

问题描述 投票:2回答:1

我有一个脚本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
linux bash shell
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.