このようなスケジューラシェルスクリプトがあります。
while read line
do
java TestProg $line &
done < $tasklist
優秀ゾンビプロセスウィキペディアページ、それは言う
親プロセスが待機呼び出しに失敗すると、ゾンビプロセスがプロセステーブルに残り、リソースリークが発生します。
上記のスクリプトはそのwait
機能を使用しません(私はこのように多くのスケジューラシェルスクリプトを作成しました)。wait
ゾンビプロセスを防ぐためにこれを使用する必要があるかどうか疑問に思います。
while read line
do
java TestProg $line &
done < $tasklist
wait
答え1
2つの答えがあります。
親プロセスが死亡または終了すると、そのプロセスはinitによって継承されます。 initはこれを行います。したがって、短期プロセスの場合は心配する必要はありません。wait
またはに電話することをお勧めしますexit
。
私はbash呼び出しが待って終了コードをどこかに置くと思います。
wait
終了コードを取得し、プロセスを収集します。 Zombiは非常に少ないリソースを使用し、プロセステーブルの1スロット(プロセスIDなど)を除いてすべてのリソースが解放されます。
ゾンビが死んでいます。プロセステーブルのスロットを除くすべてのリソースが解放されます。プロセステーブルスロットが解放されない理由は、親プロセスが戻りコードを取得し、プロセスID(pid)を再利用する他のプロセスに影響を与えることなく、死んだ子プロセスにシグナルを送信できるためです。