Bashシェルで3つのコマンドを並行して実行しようとしています:
$ (first command) & (second command) & (third command) & wait
これに伴う問題は、first command
失敗します。たとえば、終了コードは0
(wait
が成功したためだと思います)。
望ましい動作は、コマンドの1つが失敗した場合、終了コードがゼロ以外になることです(理想的には、実行中の他のコマンドが停止します)。
どうすればこれを達成できますか?
コマンドを並行して実行したいことに注意してください!
私が考えることができる最高のものは:
first & p1=$!
second & p2=$!
...
wait $p1 && wait $p2 && ..
または
wait $p1 || ( kill $p2 $p3 && exit 1 )
...
ただし、これでもプロセスのチェックの順序が強制されるため、3番目がすぐに失敗した場合、1番目と2番目が終了するまで気付かないでしょう。
これはあなたのために働くかもしれません:
parallel -j3 --halt 2 <list_of_commands.txt
これにより、3つのコマンドが並行して実行されます。
実行中のジョブが失敗すると、残りの実行中のジョブが強制終了されて停止し、失敗したジョブの終了コードが返されます。
&&
の代わりに&
を使用する必要があります。例えば:
first command && second command && third command && wait
ただし、後続のすべてのコマンドの実行は前のコマンドの終了コード0に依存するため、これはコマンドを並行して実行しません。