私たちは皆、プロセスがどのように機能するかを知っています。プログラムを開始し、タスクを開始し、タスクが完了したらプロセスを停止します。プロセスが停止すると、そのプロセスはプロセス テーブルから削除されます。
現在のプロセスは、System-Monitor
を通じて表示できます。
ただし、一部のプログラムは実行後もプロセス テーブルに残る場合があります。
したがって、ライフサイクルを完了したがまだプロセス テーブルに残っているこれらのプロセスは、「ゾンビ プロセス」と呼ばれます。
######コンテンツ######コマンドを呼び出して、子プロセスの終了ステータスを読み取り、プロセス テーブルから子プロセスを削除する必要があります。
親プロセスが子プロセスのExitシグナルを正しく読み取ると、子プロセスはプロセステーブルから削除されます。
ただし、親プロセスが子プロセスの Exit シグナルの読み取りに失敗した場合、子プロセスは実行を完了してデッド状態にあるにもかかわらず、プロセス テーブルから削除されません。
次のように想像できます:
「あなたは建設会社のオーナーです。あなたは、労働者に仕事量に応じて毎日給料を支払います。毎日建設現場に来て、ただ座っているだけの労働者がいます。あなたは彼に給料を支払う必要はありません。 「彼は何も仕事をしません。毎日来てそこに座っているだけです。それだけです!」 このワーカーは、ゾンビ プロセスの生きた例です。
しかし、ゾンビ労働者がたくさんいる場合、建設現場は非常に混雑し、通常の労働者が働くのが困難になります。
それでは、ゾンビプロセスを見つけるにはどうすればよいでしょうか?
プロセス テーブル内のすべてのゾンビ プロセスの詳細がリストされます。
である必要があります。
kill -s SIGCHLD pid
ここでの pid を親プロセスのプロセス ID に置き換えます。これにより、親プロセスは、完了した子プロセスと停止した子プロセスをすべて削除します。
次のように考えることができます:
「道路の真ん中で遺体を見つけたので、遺族に連絡すると、遺族が遺体を道路から撤去します。」
しかし、多くのプログラムはあまりよく書かれていないため、これらの子ゾンビを削除できません (そうしないと、そもそもこれらのゾンビが表示されません)。したがって、子ゾンビを確実に削除する唯一の方法は、その親プロセスを強制終了することです。
以上がゾンビプロセスにどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。