ホームページ  >  記事  >  システムチュートリアル  >  ゾンビプロセスにどう対処するか?

ゾンビプロセスにどう対処するか?

WBOY
WBOY転載
2024-03-06 20:10:241018ブラウズ

ゾンビプロセスにどう対処するか?

ゾンビプロセスとは何ですか?

私たちは皆、プロセスがどのように機能するかを知っています。プログラムを開始し、タスクを開始し、タスクが完了したらプロセスを停止します。プロセスが停止すると、そのプロセスはプロセス テーブルから削除されます。

現在のプロセスは、System-Monitor を通じて表示できます。

ただし、一部のプログラムは実行後もプロセス テーブルに残る場合があります。

したがって、ライフサイクルを完了したがまだプロセス テーブルに残っているこれらのプロセスは、「ゾンビ プロセス」と呼ばれます。

ゾンビプロセスにどう対処するか?

######コンテンツ######
どうやって作られるのですか? プログラムを実行すると、親プロセスと多数の子プロセスが作成されます。これらすべての子プロセスは、カーネルによって割り当てられたメモリと CPU リソースを消費します。

これらの子プロセスは実行が完了すると、Exit シグナルを送信して終了します。この Exit シグナルは、親プロセスによって読み取られる必要があります。その後、親プロセスは

wait

コマンドを呼び出して、子プロセスの終了ステータスを読み取り、プロセス テーブルから子プロセスを削除する必要があります。

親プロセスが子プロセスのExitシグナルを正しく読み取ると、子プロセスはプロセステーブルから削除されます。 ただし、親プロセスが子プロセスの Exit シグナルの読み取りに失敗した場合、子プロセスは実行を完了してデッド状態にあるにもかかわらず、プロセス テーブルから削除されません。

ゾンビ プロセスはシステムに有害ですか?

そうしません。ゾンビプロセスは何もせず、リソースを使用せず、他のプロセスに影響を与えないため、ゾンビプロセスが存在しても害はありません。ただし、プロセス テーブル内の終了ステータスやその他のプロセス情報もメモリに保存されるため、ゾンビ プロセスが多すぎると問題になる場合があります。

次のように想像できます:

「あなたは建設会社のオーナーです。あなたは、労働者に仕事量に応じて毎日給料を支払います。毎日建設現場に来て、ただ座っているだけの労働者がいます。あなたは彼に給料を支払う必要はありません。 「彼は何も仕事をしません。毎日来てそこに座っているだけです。それだけです!」 このワーカーは、ゾンビ プロセスの生きた例です。

しかし

、ゾンビ労働者がたくさんいる場合、建設現場は非常に混雑し、通常の労働者が働くのが困難になります。

それでは、ゾンビプロセスを見つけるにはどうすればよいでしょうか?

ターミナルを開いて次のコマンドを入力します: ps aux | grep Z


プロセス テーブル内のすべてのゾンビ プロセスの詳細がリストされます。

ゾンビプロセスを強制終了するにはどうすればよいですか?

通常の状況では、SIGKILL
を使用できます。 プロセスを強制終了する信号を送信しますが、ゾンビ プロセスはすでに停止しており、すでに停止しているものを強制終了することはできません。したがって、入力する必要があるコマンドは

である必要があります。 kill -s SIGCHLD pid

ここでの pid を親プロセスのプロセス ID に置き換えます。これにより、親プロセスは、完了した子プロセスと停止した子プロセスをすべて削除します。 次のように考えることができます:

「道路の真ん中で遺体を見つけたので、遺族に連絡すると、遺族が遺体を道路から撤去します。」

しかし、多くのプログラムはあまりよく書かれていないため、これらの子ゾンビを削除できません (そうしないと、そもそもこれらのゾンビが表示されません)。したがって、子ゾンビを確実に削除する唯一の方法は、その親プロセスを強制終了することです。

以上がゾンビプロセスにどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。