唯一のゾンビを取り除くための方法は、その親を作ることですwait()、それはその終了ステータスを報告できるようにします。SIGCHLD親が適切に記述されていると仮定して、親に送信することでそれを行うことができます。
ゾンビがいる場合、それは通常、親が適切に書かれていないことを意味します(子SIGCHLDが死亡してゾンビになったときに親に送信されたため)、次のステップは親を殺すことです。(オプション付き)
などのツールを使用すると、ゾンビの系統を表示して、どのプロセスが親であるかを知ることができます。
親が死ぬとき、ゾンビはによって養子に入れられます。これは常に子供が死ぬことであり、養子縁組するすべてのゾンビを喜んで殺します。pstree-p
initwait()
親プロセスが実際init(PID 1)である場合は、発生してはならない状況にあります。への送信SIGCHLDを試すこともできますがinit、実際にそれを行う必要はありません。それがうまくいかない場合は、システムinitが故障していてジョブを実行していないため、再起動するしか方法がありません。
(これらは「ショットガン」オプションです。)
いくつかの私はより多くのクリエイティブな人々あなたが親プロセスを殺す避けたい場合も、このオプションが出ています。
- ゾンビと親プロセスのPIDSを決定します
(この例では、ゾンビがPID 3101で、親がPID 3100であるとしましょう)
- アップ火災
gdbやattach親へ:
attach 3100
waitpidゾンビを呼びます:
call waitpid(3101,0,0)
- 親から切り離し(
detach)、デバッガーを終了します。
(これは細かく調整された狙撃ライフルです。)