bash で複数のサブプロセスが終了するのを待機し、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいでしょうか? 質問する

bash で複数のサブプロセスが終了するのを待機し、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいでしょうか? 質問する

bash スクリプトで、そのスクリプトから生成された複数のサブプロセスが終了するのを待機し、!=0サブプロセスのいずれかがコードで終了したときに終了コードを返すにはどうすればよいでしょう!=0か。

簡単なスクリプト:

#!/bin/bash
for i in `seq 0 9`; do
  calculations $i &
done
wait

上記のスクリプトは、生成された 10 個のサブプロセスすべてを待機しますが、常に終了ステータスを返します0(を参照)。生成されたサブプロセスの終了ステータスを検出し、サブプロセスのいずれかがコード で終了したときにhelp wait終了コードを返すように、このスクリプトを変更するにはどうすればよいでしょうか。1!=0

サブプロセスの PID を収集し、それらを順番に待機し、終了ステータスを合計するよりも良い解決策はありますか?

ベストアンサー1

waitまた、(オプションで)PID待機するプロセスの も取得し、 を使用すると、バックグラウンドで最後に起動されたコマンドの$!を取得できますPID。ループを変更して、PID生成された各サブプロセスの を配列に格納し、各 を待機しながら再度ループしますPID

# run processes and store pids in array
pids=()
for i in $n_procs; do
    ./procs[${i}] &
    pids[${i}]=$!
done

# wait for all pids
for pid in ${pids[*]}; do
    wait $pid
done

おすすめ記事