ゾンビはすでに死んでいるので、殺すことはできません。ゾンビをクリーンアップするには、親が待機する必要があるため、親を殺すとゾンビが排除されます。 (親が死んだ後、ゾンビは pid 1 に継承され、それを待ち、プロセス テーブルのエントリをクリアします。) デーモンがゾンビになる子を生成している場合は、バグがあります。デーモンは、その子が死んで wait
になったときに通知する必要があります
ゾンビの親であるすべてのプロセスにシグナルを送信する方法の例 (これは非常に大雑把であり、意図しないプロセスを強制終了する可能性があることに注意してください。この種の大ハンマーの使用はお勧めしません):
# Don't do this. Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
試してみました:
ps aux | grep -w Z # returns the zombies pid
ps o ppid {returned pid from previous command} # returns the parent
kill -1 {the parent id from previous command}
これは機能します:)
http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/で見つけました
2) 別のユーザー (Thxs Bill Dandreta) からの素晴らしいヒント:ときどき
kill -9 <pid>
プロセスを強制終了しません。走る
ps -xal
4 番目のフィールドは親プロセスです。ゾンビの親をすべて殺すと、ゾンビは死にます!
例
4 0 18581 31706 17 0 2664 1236 wait S ? 0:00 sh -c /usr/bin/gcc -fomit-frame-pointer -O -mfpmat
4 0 18582 18581 17 0 2064 828 wait S ? 0:00 /usr/i686-pc-linux-gnu/gcc-bin/3.3.6/gcc -fomit-fr
4 0 18583 18582 21 0 6684 3100 - R ? 0:00 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quie
18581
、 18582
、 18583
ゾンビです -
kill -9 18581 18582 18583
kill -9 31706
ゾンビを取り除きます。
次のコマンドで親プロセスを強制終了することにより、ゾンビ プロセスをクリーンアップできます:
kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')