如果第一个进程终止,则终止第二个(并行)进程

如果第一个进程终止,则终止第二个(并行)进程

假设我们有两个并行运行的 shell 脚本

驱动程序.sh:

./proc1.sh&
./proc2.sh&

如果另一个进程以非零代码退出,我如何终止该进程? (终止driver.sh)

答案1

使用 GNU Parallel 看起来像这样:

parallel --halt now,fail=1 ::: script1.sh script2.sh

答案2

除非你在凋零进程中有一些逻辑来在某些状态变化时控制另一个进程,否则你需要使用 PID 来跟踪/控制它们:

#!/bin/bash
./proc1.sh &
pid_1=$!  ## PID of proc1.sh

./proc2.sh &
pid_2=$!  ## PID of proc2.sh

while ps -p ${pid_1} &>/dev/null; do :; done ##Checking for existence of proc1.sh
kill ${pid_2}  ## Killing proc2.sh when proc1.sh is not running anymore

相关内容