51

システムに機能していないプロセスがあります。

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
4

5 に答える 5

41

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

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

于 2008-12-10T18:07:27.963 に答える
23

最初に強制終了する必要がある可能性のある子プロセスを確認しましたか? ジャムアップがうまくいかない場合もあります...試してみてくださいps -ef --forest

その下にある可能性があるものを確認するには(もしあれば)、最初にそれを殺し、次にあなたがすでに知っているものを殺します

于 2008-12-10T17:33:33.947 に答える
6

kill -9 でプロセスを強制終了できない場合、ほとんどの場合、原因はドライバーまたはオペレーティング システムのバグです。

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

機能していないプロセスの子プロセスを強制終了しても、発生している特定のバグになんらかの関連性がない限り、役に立ちません。

于 2009-03-10T12:07:31.267 に答える
0

プロセスはおそらく SIGPIPE などのシグナルを無視してハングしstrace -p <pid>ます。ここで何が起こっているかを確認してください。

于 2009-12-07T22:21:05.150 に答える
0

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

FWIW、私が管理していたSCO Openserver boxenでかなり見ました。マルチユーザーの使用率が高く、システム リソースが少ないですが、何も害はないようです。ただ私を悩ませました。:)

于 2008-12-10T17:19:20.620 に答える