¿Qué es un proceso zombi?
Es un proceso que terminó, pero no todo se elimina inmediatamente de la memoria, ya que su descriptor de proceso permanece en la memoria.
¿Cuál debe ser el comportamiento normal de un proceso?
Cuando finaliza un proceso, el estado del proceso se convierte en
EXIT_ZOMBIE
y se notifica al proceso primario que su proceso secundario ha muerto con el
SIGCHLD
señal.
A continuación, se supone que el proceso primario ejecuta el método
wait()
Para que la llamada del sistema lea el estado de salida del proceso inactivo y otra información. Después
wait()
se llama, el proceso zombi se elimina de la memoria. Esto sucede rápidamente, por lo que no verá que los procesos zombis se acumulan en su sistema. Pero en los casos en los que vemos que se acumulan varios procesos zombis, esta es una situación en la que el código del programa no es eficiente.
Cómo encontrar un proceso zombie:
Ejecución del comando
top
Ejecución del comando
ps -ef | grep defunct
Cómo terminar los procesos zombis acumulados:
La mayoría de las veces, los procesos zombis tienen el mismo ID de proceso primario.
Existen dos métodos para eliminar el proceso:
- Envíe el mensaje
SIGCHLD
señal al proceso principal.
Esta señal le indica al proceso primario que ejecute el comando wait()
El sistema llama y limpia a sus hijos zombis:
kill -s SIGCHLD <PPID>
Ejemplo:
kill -s SIGCHLD 2201
- Acabar con el proceso principal zombi
kill -9 <PPID>
Ejemplo:
kill -9 2201