1. ホーム
  2. bash

[解決済み] bash で複数のサブプロセスが終了するのを待ち、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいですか?

2022-03-15 14:32:36

質問

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

簡単なスクリプトです。

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

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

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

どのように解決するのですか?

wait は、(オプションで) PID を指定し、さらに $! を取得します。 PID バックグラウンドで最後に起動したコマンドの を格納するようにループを修正します。 PID を配列に格納し、各サブプロセスを待ちながら再びループします。 PID .

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

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