Breve: Este es un consejo rápido sobre cómo encontrar procesos zombies en Linux y luego eliminarlos. También aprenderá un par de cosas sobre procesos y procesos zombies.
Antes de aprender sobre el proceso Zombie, permítame recordarle 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 en primer plano (proceso interactivo) o en segundo plano (no proceso 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 padre. Los procesos también tienen sus propios procesos secundarios.
¿No me crees? Utilizar 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 hijo muere, se informa al proceso padre para que pueda hacer algo de limpieza, como liberar memoria, etc. Sin embargo, el proceso hijo entra en estado zombi si el proceso padre no se da cuenta de su muerte. Para el padre, el hijo todavía existe, pero el proceso hijo en realidad está muerto. Así es como los procesos zombies (también conocidos como procesos difuntos) se crean y permanecen en el sistema.
Aquí hay una excelente versión divertida del proceso zombie de Turnoff.us:
Credito de imagen: Turnoff.us
¿Realmente necesitas preocuparte por los procesos Zombie?
Aquí es importante decir que los procesos zombies no son tan peligrosos como su nombre puede parecer.
El problema puede surgir si su sistema tiene RAM limitada o si hay demasiados procesos zombies consumiendo 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 zombies.
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
- Yo = 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 puedes ver los procesos y su respectivo estado? Una forma sencilla es utilizar el terminal y el comando superior.
El comando superior muestra los procesos y su estado
Como puede ver en la captura de pantalla anterior, hay 250 tareas (o procesos) en total, 1 en ejecución, 248 procesos en suspensión y 1 en estado zombie.
Ahora surge la pregunta, ¿cómo acabar con el proceso zombi?
¿Cómo encontrar y matar un proceso zombie? ¿Se puede matar un proceso zombi?
Un proceso zombie ya está muerto. ¿Cómo matas un proceso que ya está muerto?
En las películas de zombies, disparas a los zombies en la cabeza o la quemas. Esa no es una opción aquí. Puede quemar su sistema para eliminar 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 se ignore. La otra opción para eliminar el proceso zombie es eliminar su proceso padre. Eso suena brutal, pero esa es la única forma segura de matar los procesos zombies.
Entonces, primero, enumeremos los procesos zombie para conocer su ID. Puede lograrse usando el comando ps así en la terminal.
ps ux | awk '{if($8=="Z+") print}'
La octava columna de la salida del comando ps ux muestra el estado de un proceso. Está pidiendo imprimir todas las líneas coincidentes donde el estado de un proceso es Z + (que indica el 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 zombie y el PID de su proceso principal.
ps -A -ostat,pid,ppid | grep -e '[zZ]'
Aquí obtiene el ID del proceso principal, por lo que finalmente finalice el proceso escribiendo la línea de comando con su respectivo proceso de ID obtenido anteriormente.
kill -9 <parent_process_ID>
Matar el proceso de los padres
Puede verificar si el proceso zombie se mata o no ejecutando el comando ps nuevamente o incluso el comando superior.
¡Felicitaciones! Ahora sabes cómo eliminar los procesos zombies.
Con aportaciones de Abhishek Prakash.