Un zombi ya está muerto, así que no puedes matarlo. Para limpiar a un zombi, debe ser atendido por su padre, por lo que matar al padre debería funcionar para eliminar al zombi. (Después de que el padre muera, el zombi será heredado por pid 1, que lo esperará y borrará su entrada en la tabla de procesos). Si su demonio genera niños que se convierten en zombis, tiene un error. Tu daemon debería notar cuando sus hijos mueren y wait
sobre ellos para determinar su estado de salida.
Un ejemplo de cómo puede enviar una señal a cada proceso que es el padre de un zombi (tenga en cuenta que esto es extremadamente rudimentario y podría eliminar procesos que no desea. No recomiendo usar este tipo de mazo):
# Don't do this. Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
Intenté:
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}
esto funcionará :)
Lo encontré en http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/
2) Aquí un gran consejo de otro usuario (Thxs Bill Dandreta):A veces
kill -9 <pid>
no matará un proceso. Ejecutar
ps -xal
el cuarto campo es el proceso principal, ¡mata a todos los padres de un zombi y el zombi muere!
Ejemplo
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
son zombis -
kill -9 18581 18582 18583
no tiene efecto.
kill -9 31706
elimina a los zombis.
Puede limpiar un proceso zombi eliminando su proceso principal con el siguiente comando:
kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')