如何杀死僵尸进程

我在前台(一个守护程序)启动了我的程序,然后用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] 

    一个僵尸已经死了,所以你不能杀死它。 要清理一个僵尸,必须由其父母等待,所以杀死父母应该努力消除僵尸。 (父母死后,僵尸会被initinheritance,等待它并清除它在进程表中的条目。)如果你的守护进程产生了成为僵尸的孩子,你有一个bug。 你的守护进程应该注意到它的孩子死后, wait他们确定退出状态。

    示例命令:

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

    您可以通过使用以下命令来清除其父进程来清除僵尸进程:

     kill -HUP $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ 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} 

    这将工作:)

    find它在http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/

    2)另一个用户(Thxs Bill Dandreta)的一个很棒的提示:有时候

     kill -9 <pid> 

    不会杀死一个进程。 跑

     ps -xal 

    第四场是父母的过程,杀死所有的僵尸的父母和僵尸死亡!

     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 

    18583是僵尸 –

     kill -9 18581 18582 18583 

    没有效果。

     kill -9 31706 

    去除僵尸。

    我试过了

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

    它对我有用。