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


回答:


17

ああ、神様!ダメダメダメ。kill -9を使用しないでください。

プロセスにきれいな機会を与えません:

  1. ソケット接続をシャットダウンする

  2. 一時ファイルをクリーンアップします

  3. それがなくなることをその子供に通知します

  4. 端末の特性などをリセットします。

一般に、15を送信し、1〜2秒待機し、それが機能しない場合は2を送信し、それが機能しない場合は1を送信します。

kill -9を使用しないでください。植木鉢をきれいにするためだけにコンバインを出さないでください。


13
kill -9はゾンビを殺しません。あなたは彼らの親を殺さなければなりません、pstreeを見てください。
LapTop006 2009年

3
@ LapTop006:その場合、彼らは吸血鬼に似ています。頭の吸血鬼を殺して侵略を止めます。
amphetamachine

2
この答えは、ほぼすべての点で間違っています。プロセスが完了しました。接続を既にシャットダウンし、一時ファイルなどをクリーンアップしています。実際のプロセスはもうありません。プロセステーブルのエントリだけです。子バイナリを削除しないでください-動作が悪くありません。それは、親がまだ子供のために適切な葬儀をまだ開催していないことを意味します。
ケンウィリアムズ

19

ゾンビプロセス(実際には<defunct>)は実際にはプロセスではありません。プロセステーブル内の唯一のエントリなので、親プロセスはwait()syscallを実行できます

心配する必要はありません。それらはリソースを占有せずwait()、親が死んだときに親が呼び出したときに消えます。



9

ただし、すでに受け入れられている答えがあります。ゾンビプロセスを殺すことができます。デバッガーを使用して親プロセスに接続し、waitpid関数を呼び出します。例:-親のPID = 100、ゾンビプロセスのPID = 200があるとします

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit

面白い。これを試してみます。
ewwhite

8

ゾンビプロセスには、プロセスツリーのエントリ以外のリソースは一切割り当てられません。これは、プロセスが完了したときに発生しますが、親プロセスはまだそれを取得していません(つまり、waitedで処理されています)。

必要に応じkill -20て、親にSIGCHLD()を送信することで、親に強制的にこれを実行させることができますが、親がそれを尊重する保証はありません。

多くの場合、短時間表示されます(たとえば、topを使用してプロセスツリーを表示しているとき)-これは正常です。子プロセスが完了してから親がポーリングするまでのタイムスライスでは、子プロセスはゾンビとして表示されます。

ただし、継続的に存在するゾンビプロセスが見られる場合(これは正常ではありません)-デッドプロセスにリソースが割り当てられていないため、心配する必要はありません-これは一般的に、アプリケーションが粗末な開発者によって不十分に書かれていることを意味します。

ゾンビプロセスに注意する必要があるのは、たとえば、上記の同じくだらないアプリケーションに負荷がかかっている場合など、たくさんのプロセスを見るときだけです。

私には多くの安っぽい開発者がいますので、そのような問題に対処し、その間にあらゆる種類の役に立たないことを学ぶ特権があります。実際、私のチームは、インタビューでくだらない開発者によって書かれたくだらないシェルスクリプトを使用することにしばしば頼ります-候補者がスクリプトが本当にくだらないことを選択し、それがくだらない理由を教えてくれるなら、彼はドアに足を踏み入れています。


0

仮想ショットガンについては...

$ shoot <pid>
#!/ bin / sh
犠牲者= `ps -e -o pid、ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' `
犠牲者\ _name = `ps -e -o pid、cmd | egrep "^ \ s * $ {victim} \ b" | head -n 1 | awk '{print $ 2}' `
#kill $ {victim}
echo "殺された$ {victim_name}。"

そして覚えておいてください:常に頭の中でそれらを撃ちます。


申し訳ありませんが、記録のために、このスクリプトにはタイプミス「victim_name」があり、$ 1で指定されたPIDの親を殺します。父を殺し、それで家族全員が滅びます。
マークリエラ

-1

ゾンビプロセスは、実行を終了したプロセスですが、プロセステーブルにはまだリストされています。

kill -9 [親process_name]は、極端な偏見を持ってそれを停止します。


kill -9はゾンビプロセスを強制終了しません。これがゾンビと呼ばれる理由の1つです。ゾンビの「プロセス」は、そのリターンコードが親プロセスによって回収されるまで消えません。
メイ

3
いや、殺す-9に親が親を殺す、それの親に、init作るWILL子供のリターンコードを享受。
アラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.