このディスパッチャはゾンビプロセスを生成しますか?

このディスパッチャはゾンビプロセスを生成しますか?

そのようなディスパッチャ シェル スクリプトがあります。

while read line
do
    java TestProg $line &
done < $tasklist

上のゾンビプロセスのWikipediaページと書いてある

親がwaitを呼び出さなかった場合、ゾンビはプロセステーブルに残され、リソースリークが発生します。

上記のスクリプトでは、関数を使用しませんでした(多くのディスパッチャ シェル スクリプトをこの方法で記述しました)。ゾンビ プロセスを防ぐために、次のようにwait使用する必要があるかどうか疑問に思っています。wait

while read line
do
    java TestProg $line &
done < $tasklist
wait

答え1

答えは2つあります:

親が死んだり終了したりすると、プロセスは init によって継承されます。init がそれを実行します。したがって、短期間実行されるプロセスについては心配する必要はありません。アドバイスとしては、waitまたは を呼び出す必要がありますexit

bash は wait を呼び出して、終了コードをどこかに置くと思います。

wait終了コードのみを取得し、プロセスを取得します。ゾンビはリソースをほとんど使用せず、プロセス テーブル内のスロット (プロセス ID など) を除いてすべてが解放されます。

ゾンビは死んでいる: プロセス テーブル内のスロットを除くすべてのリソースが解放されます。プロセス テーブル スロットが解放されない理由は、親が (とりわけ) 戻りコードを取得し、プロセス ID (pid) を再使用している別のプロセスに影響を与えることなく、死んだばかりの子に信号を送ることができるためです。

関連情報