Linuxでゾンビプロセスを処理する方法

Linuxでゾンビプロセスを処理する方法

ゾンビプロセスはUnix / Linuxシステムで作成されます。killコマンドで削除できます。

しかし、Linuxにはゾンビプロセスを処理するための組み込みクリーンアップメカニズムはありますか?

ベストアンサー1

ゾンビプロセスが終了しました。あなたはそれらを殺すことはできません。コマンドkillやシステムコールはゾンビプロセスには影響しません。 (ゾンビを追い出すことはできますが、kill後で見てみましょうが、ゾンビではなく両親を撃つ必要があります。)

ゾンビプロセスは実際のプロセスではなく、プロセステーブルのエントリにすぎません。ゾンビプロセスに関連する他のリソースはありません。メモリや実行コードはなく、開いているファイルも保持しません。

プロセスが終了すると、他のすべてのリソースがクリーンアップされた後に最後に消えるのは、プロセステーブルのエントリです。このアイテムはゾンビを形成し、親プロセスが子プロセスの終了状態を追跡できるようにします。親は次のいずれかを呼び出して終了ステータスを読み取ります。waitシステムコールファミリーこの時点でゾンビは消えます。wait電話が来たそうです。報酬The Childはゾンビが死んだが、ある意味ではまだ完全に死後の世界にいないというたとえ話を拡張しています。親はまた、(SIGCHLD信号を無視するか、次を呼び出すことによって)相関しないことを示してもよい。sigactionフラグSA_NOCLDWAIT)、この場合、プロセステーブルのエントリは子プロセスが終了するとすぐに削除されます。

したがって、ゾンビはプロセスが終了し、その親がまだ呼び出されていない場合にのみ存在しますwait。この状態は、親プロセスが継続して実行されている間だけ持続します。親プロセスが子プロセスの前に死んだ場合、または子プロセスの状態を読み取らずに死んだ場合、ゾンビプロセスの親プロセスはPID 1を持つプロセスに設定されます。init。そのうちの1つinitは、wait呼び出しを繰り返して親が残したゾンビプロセスを選択することです。

おすすめ記事