Respuestas:
¡Oh Dios! No no no. No uses kill -9.
No le da al proceso la oportunidad de limpiar:
apague las conexiones del zócalo
limpiar archivos temporales
informar a sus hijos que se va
restablecer sus características de terminal y así sucesivamente y así sucesivamente.
En general, envíe 15 y espere un segundo o dos, y si eso no funciona, envíe 2, y si eso no funciona, envíe 1. Si eso no funciona, ¡QUITE EL BINARIO porque el programa se comportó mal!
No uses kill -9. No saque la cosechadora solo para ordenar la maceta.
El proceso de zombis (en realidad ahora se llaman <defunct>
) no es realmente un proceso. Es solo una entrada en la tabla de procesos, por lo que el proceso padre puede hacer wait()
syscall .
No deberías preocuparte por ellos. No ocupan ningún recurso, desaparecerán cuando su padre llame wait()
cuando el padre muera.
Sin embargo, ya hay una respuesta aceptada: PUEDES matar el proceso zombie. Adjunte con el depurador al proceso padre y llame a la función waitpid. Por ejemplo: supongamos que el padre tiene PID = 100, el proceso zombie tiene PID = 200
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Un proceso zombie no tiene recursos asignados, aparte de la entrada en el árbol de procesos. Esto sucede cuando se completa un proceso, sin embargo, el proceso padre aún no lo ha cosechado (es decir, wait
editado en él).
Puede intentar forzar al padre a hacer esto si lo desea enviándole un SIGCHLD ( kill -20
), al padre, pero no hay garantía de que el padre lo respete.
A menudo los verá durante cortos períodos de tiempo (por ejemplo, mientras ve el árbol de procesos usando la parte superior); esto es normal; En el intervalo de tiempo entre el momento en que se completa un proceso secundario y el padre lo encuesta, el proceso secundario aparecerá como un zombi.
Sin embargo, si ve procesos zombis que existen continuamente, lo que no es normal, todavía no hay necesidad de preocuparse, ya que no hay recursos asignados a un proceso inactivo, generalmente significa que la aplicación está mal escrita por desarrolladores desagradables.
El único momento en el que deberías preocuparte por los procesos zombie es cuando ves muchos, por ejemplo, si la misma aplicación de mierda mencionada anteriormente se coloca bajo carga.
Tenemos muchos desarrolladores malos donde trabajo, por lo que tengo el privilegio de lidiar con tales problemas y aprender todo tipo de cosas inútiles mientras lo hago. De hecho, mi equipo a menudo recurre al uso de los scripts de shell de mierda escritos por los desarrolladores de mierda en las entrevistas, si el candidato puede elegir que el script es realmente malo y decirnos por qué es malo, tiene un buen pie en la puerta.
En cuanto a la escopeta virtual ...
$ shoot <pid>
#! / bin / sh víctima = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' ' víctima \ _name = `ps -e -o pid, cmd | egrep "^ \ s * $ {victim} \ b" | cabeza -n 1 | awk '{print $ 2}' ' #kill $ {victim} echo "Asesinado $ {victim_name}".
Y recuerda: siempre dispara en la cabeza.
Un proceso zombie es un proceso que ha terminado de ejecutarse, pero que todavía aparece en la tabla de procesos.
kill -9 [parent process_name] lo colocará, con prejuicios extremos.