同時に実行する2つのコマンドがあります。そして、スクリプトのいずれかがコード0または1で終了した場合、スクリプトを終了させたいのですが、Linux(Ubuntu)でこれを実現するにはどうすればよいですか。
cmd1 &
cmd2 &
wait
このようなもの:
(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait
bash
4.4以降:
cmd1 & p1=$!
cmd2 & p2=$!
wait -n
[ "$?" -gt 1 ] || kill "$p1" "$p2"
wait
wait -n
は、最初のバックグラウンドジョブが完了するのを待機し、その終了ステータスを$?
。
これは、最初のジョブが0または1で終了したときに他のジョブを強制終了することを想定しています。スクリプトを終了し、他のコマンドを親なしで実行したままにする場合は、kill
コマンドをexit
に変更します。