Resumen:Este es un consejo rápido para encontrar procesos zombis en Linux y luego eliminarlos. También aprendes una o dos cosas sobre procesos y procesos zombis.
Antes de aprender sobre el proceso Zombie, déjame recordar qué es un proceso en Linux.
En pocas palabras, un proceso es una instancia en ejecución de un programa en ejecución. Puede ser de primer plano (proceso interactivo) o de fondo (proceso no interactivo o automático). Puede ser un proceso padre (creador de otros procesos durante el tiempo de ejecución) o hijo (proceso creado por otros).
En Linux, a excepción del primer proceso init (o systemd) con PID 0, todos los demás procesos tienen un proceso principal. Los procesos también tienen sus propios procesos secundarios.
¿No me crees? Usa el pstree
comando en la terminal para mirar el árbol de procesos para ver el "árbol genealógico" de los procesos de su sistema.
¿Qué es un proceso Zombie en Linux?
Cuando un proceso secundario muere, se informa al proceso principal para que pueda realizar algunas tareas de limpieza, como liberar memoria, etc. Sin embargo, el proceso secundario entra en estado zombi si el proceso principal no es consciente de su muerte. Para el padre, el hijo aún existe, pero el proceso hijo está muerto. Así es como se crean y permanecen en el sistema los procesos zombis (también conocidos como procesos difuntos).
Aquí hay una excelente versión divertida del proceso zombie de Turnoff.us:
¿Realmente necesita preocuparse por los procesos Zombie?
Aquí es importante decir que los procesos zombie no son tan peligrosos como su nombre puede sonar.
El problema puede surgir si su sistema tiene RAM limitada o si hay demasiados procesos zombies que consumen RAM. Además, la mayoría de los procesos de Linux pueden tener un PID máximo establecido en 32768. Si no hay ID disponibles para otras tareas productivas, su sistema puede fallar.
Esto rara vez sucede, pero es una posibilidad, especialmente si un programa mal codificado comienza a inducir numerosos procesos zombis.
En tal caso, sería una buena idea encontrar y eliminar el proceso zombie.
¿Cómo encontrar procesos zombies?
Un proceso en Linux puede tener uno de los siguientes estados:
- D =sueño ininterrumpido
- I =inactivo
- R =corriendo
- S =durmiendo
- T =detenido por señal de control de trabajo
- t =detenido por el depurador durante el seguimiento
- Z =zombi
Pero, ¿dónde se pueden ver los procesos y su respectivo estado? Una manera fácil es usar la terminal y el comando superior.
Como puede ver en la captura de pantalla anterior, hay 250 tareas (o procesos) en total, 1 está en ejecución, 248 procesos están inactivos y 1 está en estado zombi.
Ahora, surge la pregunta, ¿cómo matar el proceso zombie?
¿Cómo encontrar y eliminar un proceso zombi? ¿Se puede matar un proceso zombie?
Un proceso zombie ya está muerto. ¿Cómo matas un proceso que ya está muerto?
En las películas de zombis, disparas a los zombis en la cabeza o la quemas. Esa no es una opción aquí. Puede quemar su sistema para matar el proceso zombie, pero esa no es una solución factible 😉
Algunas personas sugieren enviar la señal SIGCHLD al proceso principal. Pero es más probable que sea ignorado. La otra opción para eliminar el proceso zombi es eliminar su proceso principal. Eso suena brutal, pero es la única forma segura de acabar con los procesos zombi.
Entonces, primero, enumeremos los procesos zombis para conocer su ID. Se puede lograr usando el comando ps como este en la terminal.
ps ux | awk '{if($8=="Z+") print}'
La octava columna en la salida del comando ps ux muestra el estado de un proceso. Está solicitando imprimir todas las líneas coincidentes en las que el estado de un proceso es Z+ (que indica un estado zombi).
Una vez que haya identificado su ID de proceso, obtengamos la ID de proceso de su padre.
ps -o ppid= -p <child_id>
Alternativamente, puede combinar los dos comandos anteriores de la siguiente manera, donde proporciona directamente el PID del proceso zombi y el PID de su proceso principal.
ps -A -ostat,pid,ppid | grep -e '[zZ]'
Aquí obtiene el ID del proceso principal, así que finalmente elimine el proceso escribiendo la línea de comando con su respectivo proceso de ID obtenido antes.
kill -9 <parent_process_ID>
Puede verificar si el proceso zombie se cancela o no ejecutando el comando ps nuevamente o incluso el comando superior.
¡Felicitaciones! Ahora ya sabes cómo eliminar procesos zombies.
Con aportes de Abhishek Prakash.
Artículo Original