bashスクリプトで生成されたすべてのプロセスとバックグラウンドプロセスが完了するのを待つ方法

bashスクリプトで生成されたすべてのプロセスとバックグラウンドプロセスが完了するのを待つ方法

プロセスを終了して待ってから、プロセスが完了するまで生成するために生成したいbashスクリプトの操作ソリューションを見つけて見つけましたが、見つかりませんでした。私はまだLinuxについて多くを学んでいます。

コンテキスト: プロセス FOO が実行中です。プロセスBARはFOOを確認して終了するために使用されます(これら2つのプロセスの内部を制御することはできません)。私ができることは、BARにコマンドを渡して実行することだけです。

この例では、FOO を終了するコマンドを BAR に送信します。これにより、別のプロセスが作成され、バックグラウンドに配置されます。

ターゲット:20個のFOOに対して(BARを介して)シャットダウンを実行し、スクリプトの次の部分を続行する前に、すべてのFOOが死ぬのを待つために20個のコマンドを同時に実行しようとしています。

質問:これまでにできることは、BARが実行されるのを待ってからバックグラウンドプロセスがFOOを終了する前に続けることです。

BAR exit FOO1
BAR exit FOO2
...
BAR exit FOO20
wait
do more stuff

私も試しました

BAR exit FOO1
PID1=$!
BAR exit FOO2
PID2=$!
wait $PID1 $PID2

不運。

ベストアンサー1

待機中の他のプロセスがない場合は、wait引数なしですべてのバックグラウンド操作が完了するまで待ちます。私はしばしば次のような構造を使用します。

for i in *; do md5sum $i & done
wait

ただし、スクリプトに別のバックグラウンド操作があると中断されますが、サブシェルにラップすることはできます。

(for i in *; do md5sum $i & done; wait) & all_md5sum=$!
...
wait $all_md5sum

おすすめ記事