En resumen: este es un consejo rápido para 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 (proceso no interactivo o automatizado). Puede ser un padre (creador de otros procesos en tiempo de ejecución) o un hijo (creado por otros).
En Linux, con la 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 creas? Utilizar el pstree
Comando en la terminal para mostrar el árbol de procesos para ver el ‘árbol genealógico’ de los procesos de su sistema.
Tabla de Contenidos
¿Qué es un proceso zombie en Linux?
Cuando un proceso hijo muere, se notifica al proceso padre para que pueda realizar una limpieza, p. Ej. Para los padres, el hijo todavía existe, pero el proceso hijo en realidad está muerto. Así es como los procesos zombies (también conocidos como procesos obsoletos) se crean y permanecen en el sistema.
Aquí hay una excelente y divertida versión del proceso zombie de Turnoff.us:
¿Realmente necesitas preocuparte por los procesos zombies?
Es importante decir aquí que las pruebas de zombis no son tan peligrosas como suena su nombre.
El problema puede ocurrir si su sistema tiene RAM limitada o si demasiados procesos zombies consumen RAM. Además, el PID máximo se puede establecer en 32768 para la mayoría de los procesos de Linux. Si no hay ID disponibles para otras tareas productivas, su sistema puede fallar.
Esto rara vez sucede, pero es una posibilidad, especialmente cuando un programa mal codificado comienza a inducir numerosos procesos zombies.
En tal caso, sería una buena idea encontrar el proceso zombie y matarlo.
¿Cómo encuentro procesos zombies?
Un proceso en Linux puede tener uno de los siguientes estados:
- D = sueño ininterrumpido
- i = inactivo
- R = corriendo
- S = dormir
- T = detenido por señal de control de trabajo
- t = detenido por el depurador durante el seguimiento
- Z = zombi
Pero, ¿dónde ves los procesos y su respectivo estado? Una forma sencilla es utilizar la terminal y el comando superior.
Como puede ver en la captura de pantalla anterior, hay un total de 250 tareas (o procesos), 1 en ejecución, 248 procesos en suspensión y 1 en estado zombi.
Ahora la pregunta es cómo acabar con el proceso zombi.
¿Cómo encuentro y elimino un proceso zombie? ¿Se puede matar a un juicio de zombies?
Un proceso zombi ya está muerto, ¿cómo se termina un proceso que ya está muerto?
En las películas de zombies, disparas a los zombis en la cabeza o los quemas. Esa no es una opción aquí. Puede quemar su sistema para finalizar el proceso zombie, pero esa no es una solución viable;)
Algunas personas sugieren enviar una señal SIGCHLD al proceso de nivel superior. Pero es más probable que se ignore. La otra forma de acabar con el proceso zombie es matar a su proceso padre. Suena brutal, pero es la única forma segura de acabar con los procesos zombis.
Primero, enumeremos los procesos zombies para conocer su ID. Esto se puede lograr usando el comando ps en la terminal de la siguiente manera.
ps ux | awk 'if($8=="Z+") print'
La octava columna de la salida del comando ps ux muestra el estado de un proceso. Piden imprimir todas las líneas coincidentes donde el estado de un proceso es Z + (que indica el estado zombi).
Después de identificar su ID de proceso, obtengamos el ID de proceso del padre.
ps -o ppid= -p <child_id>
Alternativamente, puede combinar los dos comandos anteriores de la siguiente manera, proporcionando directamente el PID del proceso zombie y el PID del proceso principal.
ps -A -ostat,pid,ppid | grep -e '[zZ]'
Aquí es donde obtiene la ID del proceso principal, así que finalmente finalice el proceso ingresando la línea de comando con la ID apropiada del proceso que obtuvo anteriormente.
kill -9 <parent_process_ID>
Puede verificar si el proceso zombie ha finalizado o no ejecutando el comando ps nuevamente o incluso el comando superior.
¡Felicidades! Ahora sabes cómo eliminar los procesos zombies.
Con aportes de Abhishek Prakash.