205

プログラムをフォアグラウンド (デーモン プログラム) で起動し、それを で殺しました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    [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [anyprogramd]
4

8 に答える 8

279

ゾンビはすでに死んでいるので、殺すことはできません。ゾンビをクリーンアップするには、親が待機する必要があるため、親を殺すとゾンビが排除されます。(親が死んだ後、ゾンビは pid 1 に継承され、それを待ち、プロセス テーブルのエントリをクリアします。) デーモンがゾンビになる子を生成している場合は、バグがあります。デーモンは、その子がいつ死ぬかを通知し、waitその終了ステータスを判断する必要があります。

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

# Don't do this.  Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
于 2013-06-05T16:17:00.830 に答える
69

次のコマンドで親プロセスを強制終了することで、ゾンビ プロセスをクリーンアップできます。

kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')
于 2014-02-26T17:53:12.020 に答える
42

私は試した:

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}

これはうまくいきます:)

于 2013-09-16T06:11:41.913 に答える
25

私は試した

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

そしてそれは私のために働きます。

于 2014-11-03T16:30:30.923 に答える
1

親 ppid を kill できない場合があるため、ゾンビ pid を kill します。

kill -9 $(ps -A -ostat,pid | awk '/[zZ]/{ print $2 }')
于 2020-10-16T23:52:38.533 に答える