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