web-dev-qa-db-ja.com

UNIXシステムで機能しないプロセスを強制終了する

システムに無効なプロセスがあります:

abc      22093 19508  0 23:29 pts/4    00:00:00 grep ProcA
abc      31756     1  0 Dec08 ?        00:00:00 [ProcA_my_collect] <defunct>

マシンを再起動せずに上記のプロセスを強制終了するにはどうすればよいですか?私は試しました

kill -9 31756
Sudo kill -9 31756
49
gagneet

プロセスを強制終了しましたが、親プロセスが「リーピング」と呼ばれるタスクを実行するまで(そのプロセスに対して終了ステータスを読み取るためにwait(3)を呼び出す)、デッドプロセスはプロセステーブルから消えません。回収されていないデッドプロセスは、「 ゾンビプロセス 」と呼ばれます。

31756の親プロセスIDはプロセスID 1で、常にinitに属します。そのプロセスは、ゾンビプロセスを定期的に回収する必要がありますが、回収できない場合は、再起動するまでプロセステーブルにゾンビが残ります。

41
Bill Karwin

最初に強制終了する必要があるかもしれない子プロセスをチェックしましたか?時々、ジャムアップが発生することがあります... ps -ef --forest

(もしあれば)その下にあるかもしれないものを見るために、最初にそれを殺し、次にあなたがすでに知っているものを殺す

23
curtisk

Kill -9がプロセスの強制終了に失敗した場合、ほとんどの場合、原因はドライバーまたはオペレーティングシステムのバグです。

Initプロセスはプロセスを採用していますが、それを刈り取ることができません。つまり、initがwait(2)を呼び出すと、そのプロセスは返されません。 initの主な目的の1つは、孤立した孤立した子を刈り取ることです。したがって、問題は、親が刈り取られる前に死亡したことではありません。考えてみてください:そうでなければ、誰がログアウト後にNohup'dプロセスの結果を得るのでしょうか?

消滅したプロセスの子を殺すことは、彼らが見ている特定のバグに何らかの形で関連していない限り、助けにはならないでしょう。

6
janm

プロセスはおそらくハングします。 SIGPIPEのような信号を無視するには、strace -p <pid> ここで何が起きてるの。

0
tolazy

親を殺しても解決できない場合は、おそらくできないでしょう。何らかの理由で、システムはゾンビプロセスを収集していません。

FWIW、私が管理していたSCO Openserver boxenでかなり見ました。重いマルチユーザー使用と低いシステムリソースですが、それは何も傷つけないようでした。ただイライラしました。

0
Brian Knoblauch