最初のプロセスが終了したら、2番目の(並列)プロセスも終了する

最初のプロセスが終了したら、2番目の(並列)プロセスも終了する

2つのシェルスクリプトが並行して実行されていると仮定しましょう

ドライバー.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

関連情報