Zombie je již mrtvá, takže ji nemůžete zabít. Aby bylo možné zombie uklidit, musí na ni čekat její rodič, takže zabití rodiče by mělo fungovat k odstranění zombie. (Po smrti rodiče zombie zdědí pid 1, který na ni počká a vymaže její záznam v tabulce procesů.) Pokud váš démon plodí děti, ze kterých se stávají zombie, máte chybu. Váš démon by si měl všimnout, když jeho děti zemřou, a wait
na nich určit jejich výstupní status.
Příklad toho, jak můžete poslat signál každému procesu, který je rodičem zombie (všimněte si, že je to extrémně hrubé a mohlo by to zabít procesy, které nemáte v úmyslu. Nedoporučuji používat tento druh perlíku):
# Don't do this. Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
Zkusil jsem:
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}
to bude fungovat :)
Nalezeno na adrese http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Zde je skvělý tip od jiného uživatele (Thxs Bill Dandreta):Někdy
kill -9 <pid>
nezabije proces. Spustit
ps -xal
4. pole je rodičovský proces, zabijte všechny rodiče zombie a zombie zemře!
Příklad
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
jsou zombie -
kill -9 18581 18582 18583
nemá žádný účinek.
kill -9 31706
odstraní zombie.
Proces zombie můžete vyčistit tím, že zabijete jeho nadřazený proces pomocí následujícího příkazu:
kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')