システムのゾンビプロセスを強制終了する必要がありますか?


20

私はLinux / Unixシステムの初心者であり、ゾンビプロセスについて読んだだけので、1つの質問があります。現在10個あります。それらを殺す必要がありますか?システムに負荷がかかりますか?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped

25
それらを殺す必要はありません。彼らはすでに死んでいます。
マルコ

2
だから彼らは私のシステムをもうロードしません。そして、システムを再起動するか、強制終了するまで、これらはそのままです。
ジェイソンパドル

7
@マルコ:すでに死んでいるものを殺すことはできません。しかし、あなたはその親を殺すことができます!
wullxz

7
問題は、彼らの親が彼らを刈り取らなかったということです(彼らが死んだとき)。
ypercubeᵀᴹ

3
10ゾンビ??? あなたがはびこっています!ジェイソンを実行します。
リュックM

回答:


29

あなたはゾンビを殺すことはできません、それはすでに死んでいます。

そのプロセスのリソースは無料で、他のプロセスで使用できます。残っているのはプロセステーブルのエントリです。これはパフォーマンスに影響しません。心配しないでください。


はい、これは理にかなっています。親プロセスを強制終了できます。情報をありがとう。システムがロードされるか、システムがロードされないかを知りたいだけです。
ジェイソンパドル

ゾンビには限りがあると思います。私は1024だと思うので、パフォーマンスを損なうことはありませんが、あなたが持つことができる数には上限があると思います。
ProfessionalAmateur

@ProfessionalAmateurゾンビの制限(1024など)に達するとどうなりますか?
冷凍エンドウのロディ

@RoddyoftheFrozenPeas-正直に言うと、私はよくわかりませんが、その時点に至る前にそれらを常にクリーンアップしました。システムが別のゾンビを作成しようとし、おそらくメモリ違反またはその他のハードエラー、オーバーフロー、ある種のセグメンテーションフォールトが発生することを想像します。
ProfessionalAmateur

2
@ProfessionalAmateur:Linuxにはゾンビの制限はありません。ゾンビPIDは/proc/sys/kernel/pid_max、他のすべてのPIDと同様にの対象となります。
rsaw

16

psに現れるこれらのゾンビプロセスは何ですか?私は彼らを殺しますが、彼らは消えません!

ゾンビは死んだプロセスです。死者を殺すことはできません。すべてのプロセスは最終的に死に、そのプロセスはゾンビになります。彼らは死んでいるので予想されるリソースをほとんど消費しません!ゾンビの理由は、ゾンビの親(プロセス)がゾンビの終了ステータスとリソース使用統計を取得できるようにするためです。親は、wait()システムコールの1つを使用して、ゾンビが不要になったことをオペレーティングシステムに通知します。

プロセスが停止すると、その子プロセスはすべてプロセス番号1の子になります。これはinitプロセスです。Initは常に 子供が死ぬのを待っているので、子供はゾンビのままではありません。

ゾンビプロセスがある場合は、それらのゾンビが親によって待機されていないことを意味します(ps -lによって表示されるPPIDを見てください)。3つの選択肢があります。親プロセスを修正します(待機させます)。親を殺します。またはそれと一緒に暮らす。ゾンビはpsの出力で余分な行を1つ以上使用するため、それと一緒に生活することはそれほど難しくありません。

ソース:http : //www.linuxsa.org.au/tips/zombies.html

そして、あなたが殺し屋にいる場合、このスーパーユーザースレッドはあなたにとって興味深いかもしれません: ゾンビプロセスの親プロセスをどのように見つけますか?


親を修正するのはやり過ぎかもしれないことに注意してください-多分それはまだそれが子供たちを待っているという点に到達していないだけかもしれません。多分それは後でそれをするでしょう(あるいははい、多分そうしないでしょう)。
ロマン

はい、あなたが正しい。リンクした質問の答えは、親プロセスを決定する方法を示しています。したがって、どのプロセスがゾンビを作成するかを確認し、それを実行し続ける必要があるかどうかを判断する機会が常にあります。
wullxz

7

それらを殺す必要はありません。

基本的な理解を深めるには:

すべてのプロセスは親プロセスの子です(initプロセスを除きますが、それについて心配する必要はありません)。

子プロセスの実行が終了しても、親プロセスがアクセスしたいデータ、通常は子プロセスの結果を説明する終了コードが含まれている可能性があります(成功しましたか?エラーですか?エラーコードは何ですか?)。

終了した子プロセスは、親プロセスが「リープ」または子プロセスを待機するまでゾンビプロセスとしてプロセステーブル内でハングアップします。これは、子プロセスが不要になったことをOSに伝える親プロセスです。必要な戻り値を読み取り、それで完了します。この時点で、システムはプロセステーブルのエントリをクリーンアップします。


3

このプロセスを強制終了する必要はありません。

とにかく(何らかの理由で)それを殺したい場合は、頭を撃つようにしてください、これは便利なコマンドです:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

https://www.erianna.com/kill-a-linux-zombie-processから


1
+1 shoot at the head
BenjiWiebe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.