Cómo matar procesos Zombie en Linux

A El proceso zombie en Linux se refiere a aquellos procesos ya muertos pero, de una forma u otra, todavía están presentes en la tabla de procesos del sistema. El problema es que, por alguna razón, el padre no limpió este proceso de la tabla de procesos. Por lo general, esto sucede después de la finalización del proceso de ejecución.

La forma habitual de funcionamiento en Linux es que después de que un proceso completa su ejecución, notifica a su padre, que es responsable de eliminar el proceso de la tabla. Desafortunadamente, el padre no puede eliminar el proceso de la memoria en los casos en que el padre no puede leer el estado del niño. Así es como llega a ser que tenemos procesos muertos en la tabla de procesos. Estos son los que llamamos procesos zombies.

Índice

¿Qué causa los procesos de Linux Zombie?

Cuando se crea el proceso hijo, un proceso padre mal escrito puede fallar al llamar a la función wait (). Como resultado, sus hijos zombis permanecerán en la memoria hasta que se extingan.

Esto significa que nada está monitoreando el proceso inicial para detectar cambios de estado y la señal SIGCHLD será ignorada. Quizás otra aplicación esté interfiriendo con la ejecución del proceso principal, ya sea a través de una programación pésima o una intención maliciosa.

No se llevará a cabo la limpieza adecuada del sistema si el proceso principal no está atento a los cambios de estado en el proceso secundario.

Cuando finalice el proceso inicial, la PCB y la entrada en la tabla de proceso no se eliminarán. El estado zombi nunca se elimina de la PCB como resultado de esto.

Los zombis tienen algo de memoria, pero no suele ser un problema. Debido a que los sistemas Linux tienen un número finito de PID (aunque un gran número), si se zombizan suficientes PID, no se puede iniciar ningún otro proceso. Es dudoso que esto suceda.

Sin embargo, los procesos zombis sugieren que algo salió mal con una aplicación y que un programa específico puede tener un error.
Los errores de software en los centros de datos no deben tolerarse y deben abordarse.
Debe estar atento y destruir los procesos zombies hasta que se solucione la falla.

El ID de proceso no se puede reutilizar hasta que se inicia, por lo que la entrada de la tabla de proceso es pequeña.
Debido a que la PCB es mucho más grande que la entrada de la tabla de procesos en un sistema operativo de 64 bits, es poco probable que esto cause problemas.

La cantidad de memoria disponible para otros procesos podría verse afectada por una gran cantidad de zombies. Sin embargo, si tiene tantos zombis, tiene un problema grave con la aplicación principal o un error en el sistema operativo.

Entonces, ¿qué haces cuando un procedimiento se convierte en un zombi? Rastrea y elimina los procesos zombies.

¿Cómo encontrar un proceso zombie?

La primera parada para matar un proceso zombi en el sistema es identificarlo primero. Debido a que el proceso de inicio limpia los zombis con regularidad, todo lo que tienes que hacer para deshacerte de ellos es destruir el proceso que los creó.

El comando superior es una forma rápida de ver si hay zombis en su área. Para lograrlo, ejecutaremos el siguiente comando.

top

resultados del comando superior
resultados del comando superior

El número de procesos zombies en este sistema se mostrará en la salida. En nuestro caso anterior, tenemos 0 zombis.
Usando el comando ps y canalizándolo a egrep, podemos obtener una lista de ellos. La bandera del estado para los procesos zombies es "Z" y, a veces, también verá "extinto".

tuts@fosslinux:~$ ps aux | egrep "Z|defunct"

La bandera del estado para los procesos zombies es Z o extinta
La bandera del estado para los procesos zombies es Z o extinta

Analicemos las distintas secciones de este comando.

Z en la columna STAT de la salida identifica un proceso zombi.
[defunct] en la última columna (COMANDO) de la salida también identifica un proceso zombi.

Idealmente, no es posible matar un proceso Zombie porque está muerto. En su lugar, notificamos al padre para que intente leer el estado del proceso del niño y finalmente lo limpie de la tabla del sistema. Para activar este proceso, enviamos una señal SIGCHLD al padre del proceso. Identificar el ID del proceso principal o lo que se llama PID implica ejecutar el siguiente comando:

tuts@fosslinux:~$ ps -o ppid= <Child PID>

Identificación de la identificación del proceso principal
Identificación de la identificación del proceso principal

Después de obtener el PID del Zombie, use la señal de comando SIGCHLD para los procesos padres identificados previamente.

tuts@fosslinux:~$ kill -s SIGCHLD <Parent PID>

utilizar la señal de comando SIGCHLD
utilizar la señal de comando SIGCHLD

En algunos casos, esto no borra el proceso Zombie. Esto nos llama a participar en el plan bo c. Lo anterior implica reiniciar el proceso principal o matar los procesos principales. Por otro lado, los últimos casos implican reiniciar el sistema, especialmente cuando el proceso Zombie podría causar una interrupción o un aumento masivo debido al proceso Zombie.

A continuación se muestra el comando para matar el proceso principal.

tuts@fosslinux:~$ kill -9 <Parent PID>

comando para matar el proceso padre
comando para matar el proceso padre

En caso de que se elimine un proceso padre, por extensión, también se eliminan todos los procesos secundarios del padre dado. En caso de que uno de los procesos secundarios sea crítico en un momento dado, es posible que deba posponer la matanza hasta que sea seguro. Por otro lado, una rápida verificación doble puede indicarle cuánta memoria o potencia de procesamiento están consumiendo los procesos Zombie. Esto ayuda a determinar si la mejor opción es apagar el procesador principal para reiniciar el sistema en el siguiente ciclo del mantenimiento del sistema que ya está programado.

En Linux, ¿cómo funcionan los estados de los procesos?

Por supuesto, Linux debe realizar un seguimiento de todas las aplicaciones y demonios que se ejecutan en su computadora. Mantener la tabla de procesos es una de las formas en que logra esto.
Esta es una lista de estructuras de memoria del kernel. Esta lista incluye una entrada para cada proceso que contiene alguna información sobre él. Cada una de las estructuras de la tabla de procesos contiene muy poca información.

Almacenan el ID del proceso, algunas otras piezas de información y un puntero al bloque de control del proceso (PCB).

La PCB es donde Linux almacena toda la información que necesita para buscar o configurar para cada proceso. A medida que se crea un proceso, se modifica, se le da tiempo de procesamiento y luego se destruye.

Hay más de 95 campos en la PCB de Linux. Está definido en la estructura de la tarea, que tiene más de 700 líneas. Los siguientes tipos de información se pueden encontrar en la PCB:

Los estados del proceso se ilustran a continuación.

  • Número de proceso: identificador distintivo del sistema operativo.
  • Contador de programa: cuando este proceso vuelve a tener acceso a la CPU, el sistema utilizará esta dirección para localizar la siguiente instrucción del proceso que se ejecutará.
  • Registros: este procedimiento utiliza una lista de registros de CPU denominados registros. En la lista se pueden incluir acumuladores, registros de índice y apuntadores de pila.
  • Abrir lista de archivos: los archivos asociados con este procedimiento se incluyen en la lista de archivos abiertos.
  • Información de programación de CPU: se utiliza para calcular con qué frecuencia y durante cuánto tiempo este proceso recibe tiempo de procesamiento de CPU.
    La PCB debe registrar la prioridad del proceso, los indicadores de las colas de programación y otros parámetros de programación.
  • Información de gestión de la memoria: información sobre la memoria que utiliza este proceso, como las direcciones de inicio y finalización de la memoria del proceso, así como los indicadores de las páginas de la memoria.
  • Información sobre el estado de E / S: cualquier dispositivo que el proceso utilice como entradas o salidas.

Cualquiera de los siguientes puede ser el "Estado del proceso":

  • R: Un proceso en ejecución o capaz de ejecutarse. Está funcionando, lo que significa que está obteniendo y ejecutando ciclos de CPU.
    Un procedimiento que está listo para ejecutarse está esperando una ranura de CPU.
  • S: El acto de dormir.
    El proceso está esperando la finalización de una acción, como una operación de entrada o salida. O la disponibilidad de un recurso.
  • D: El procedimiento se encuentra en un estado de sueño no interrumpible. Está usando una llamada al sistema de bloqueo, lo que significa que no continuará hasta que se completen las llamadas al sistema. A diferencia del estado de "suspensión", un proceso en este estado no responderá a las señales hasta que se complete la llamada al sistema y la ejecución haya regresado al proceso.
  • T: Debido a que recibió la señal SIGSTOP, el proceso terminó (se detuvo).
    Solo responderá a las señales SIGKILL o SIGCONT, ya sea matando o dando instrucciones al proceso para que continúe. Cuando cambia de las tareas de primer plano (fg) a segundo plano (bg), esto sucede.
  • Z: significa Proceso Zombie. Cuando un proceso termina, no desaparece simplemente. En cambio, libera cualquier memoria que esté usando actualmente y sale de la memoria, pero la entrada de la tabla de proceso y la PCB permanecen.
    Su estado se establece en EXIT ZOMBIE y se le dice a su proceso padre que el proceso infantil se ha completado a través de la señal SIGCHLD.

Conclusión

A menos que formen parte de una gran horda, los zombis no son tan dañinos. Algunos no son un gran problema, y ​​un reinicio rápido los eliminará. Sin embargo, hay un punto a considerar.

Las arquitecturas Linux tienen un número máximo de procesos y, como resultado, un número máximo de números de identificación de proceso. Cuando se alcanza el número máximo de procesos zombies de una computadora, no se pueden iniciar nuevos procesos.

Los procesos zombis no son procesos; son los restos de procesos muertos que su proceso principal no ha limpiado correctamente. Sin embargo, si nota que una aplicación o proceso en particular genera zombis constantemente, debe investigar más a fondo.

Lo más probable es que sea un programa mal escrito; en ese caso, tal vez haya una versión actualizada que se limpie después de que su hijo procese correctamente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir