回答:
ゾンビプロセスはすでに死んでいます。それらを殺すことはできません。killコマンドまたはシステムコールは、ゾンビプロセスには影響を与えません。(でゾンビを消滅させることができkillますが、すぐにわかるように、ゾンビではなく親を撃つ必要があります。)
ゾンビプロセスは実際にはプロセスではなく、プロセステーブルのエントリにすぎません。ゾンビプロセスに関連付けられている他のリソースはありません。メモリや実行中のコードがなく、ファイルを開いたままにしないなどです。
プロセスが停止した場合、他のすべてのリソースがクリーンアップされた後、最後に行くのはプロセステーブルのエントリです。このプロセスは、親プロセスが子プロセスの終了ステータスを追跡できるように、ゾンビを形成するために保持されます。親waitは、syscallsファミリーの1つを呼び出すことによって終了ステータスを読み取ります。この時点で、ゾンビは消えます。呼び出しwaitは子供を刈り取ると言われ、ゾンビが死んでいるという比metaを広げていますが、まだ何らかの方法で死後まで完全に処理されていません。親は、(SIGCHLDシグナルを無視するかsigaction、SA_NOCLDWAITフラグを使用して呼び出すことにより)気にしないことを示すこともできます。この場合、子が死んだときにプロセステーブルのエントリがすぐに削除されます。
したがって、ゾンビは、プロセスが終了し、その親がまだ呼び出されていない場合にのみ存在しwaitます。この状態は、親がまだ実行されている間のみ持続できます。親が子より前に死亡した場合、または子のステータスを読み取らずに死亡した場合、ゾンビの親プロセスはPID 1のプロセスに設定されinitます。の仕事の1つは、ループinitを呼び出しwaitて、親によって残されたゾンビプロセスを回収することです。
プロセスの親が死ぬとすぐに、プロセスは孤児になります-ゾンビであるかどうかは無視します。孤児はどうなりますか?彼らはと呼ばれる新しい親を取得しinitます。initうwait、それはこのようにして孤立を刈り取り、収集された各孤児に(つまりもよくとしてゾンビされていてもよいです)。
initても、プロセスを殺すことはありません。それはwait彼らのステータスを収集するためにその子供にのみです。