web-dev-qa-db-ja.com

ゾンビプロセスを殺す方法

私は自分のプログラムをフォアグラウンドで起動し(デーモンプログラム)、それからkill -9でそれを殺しました、しかし私はゾンビが残っているのを得ます、そして私はkill -9でそれを殺すことができません。ゾンビプロセスを殺すには?

ゾンビが死んだプロセス(すでに殺されている)である場合、どうやってそれをps auxの出力から削除しますか?

root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# ps aux | grep anyprogram
 1163 root      2552 S    anyprogramd
 1167 root      2552 S    anyprogramd
 1169 root      2552 S    anyprogramd
 1170 root      2552 S    anyprogramd
10101 root       944 S    grep anyprogram
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [cwmpd]
155
MOHAMED

ゾンビはすでに死んでいるので、あなたはそれを殺すことはできません。ゾンビを片付けるには、親によって待たなければならないので、親を殺すことはゾンビを排除するために働くべきです。 (親が死んだ後、ゾンビはpid 1によって引き継がれます。それはそれを待ってプロセステーブルのそのエントリをクリアします。)あなたのデーモンがゾンビになる子供を生み出しているなら、あなたはバグを持っています。あなたのデーモンは、子供がいつ死んでwaitになって終了ステータスを判断するのかに気づくべきです。

ゾンビの親であるすべてのプロセスにシグナルを送信する方法の例(これは非常に粗雑で、意図しないプロセスを強制終了する可能性があることに注意してください。この種のスレッジハンマーの使用はお勧めしません)。

kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
212
William Pursell

次のコマンドでゾンビプロセスを削除して、その親プロセスをクリーンアップできます。

kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')
65
krishna murti

私は試した:

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}

これは動作します:)

31
Mohammad Rafiee

/で見つけた 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

185811858218583はゾンビです -

kill -9 18581 18582 18583

効果はありません。

kill -9 31706

ゾンビを取り除きます。

22
Sergio

私は試した

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

そしてそれは私のために働く。

19
Jeoffrey