1

バックグラウンドでスクリプトを使用したループがあります

while read host
do
./script &
done
wait  #waits till all the background processes are finished

しかし、プロセスの終了ステータスを確認したいのですが、どうすればよいですか

while read host
do
./script &
wait $! || let "FAIL+=1"
done
wait
echo $fail

しかし、時間は私にとって重要な要素であるため、上記のコードは並列に実行されるので、すべてのホストで並列実行したいと考えています。

私ができるように、どのプロセスが失敗したかを知ることは可能ですか

   echo "these are the list of process ids in background that failed"
   12346
   43561
   .....

また、バックグラウンドで実行できる並列プロセスの数に制限はありますか。上記のループで約 20 の並列プロセスを実行しても安全ですか?

4

1 に答える 1

1

これをスクリプトの最後に追加できます。

RC=$?
test $RC -eq 0 || echo "$$ failed"
exit $RC

$$ は、シェルの PID を返します。バックグラウンド スクリプトは、独自の個別のシェルで実行されます。

行はexit $RC明らかにオプションです。

于 2013-06-26T07:20:52.017 に答える