Aprenda Linux

Cómo matar procesos Zombie en Linux

Cómo matar procesos Zombie en Linux

Un 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. La laguna 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.

¿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 zombies permanecerán en la memoria hasta que se extingan.

Esto significa que nada está monitoreando el proceso infantil en busca de 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.

La limpieza del sistema adecuada no ocurrirá si el proceso principal no está atento a los cambios de estado en el proceso secundario.

Cuando finalice el proceso infantil, 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 hay suficientes PID en zombis, 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 algún problema.

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 eliminas los procesos zombies.

Cómo encontrar un proceso zombie?

La primera parada para matar un proceso zombie en el sistema es identificarlo primero. Debido a que el proceso de inicio se limpia después de 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.

cima

resultados del comando superior

El número de procesos zombies en este sistema se mostrará en la salida. En nuestro caso anterior, tenemos 0 zombies.
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 | difunto"

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.
[difunto] 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 limpiarlo 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 = 

Identificación de la identificación del proceso principal

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

tuts @ fosslinux: ~ $ kill -s 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 

comando para matar el proceso padre

En caso de que se elimine un proceso padre, por extensión, todos los procesos secundarios del padre dado también se eliminan. 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 al respecto. Cada una de las estructuras de la tabla de procesos contiene muy poca información.

Almacenan la identificación 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

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

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 zombie 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.

Cómo impulsar FPS en Linux?
FPS significa Cuadros por segundo. La tarea de FPS es medir la velocidad de fotogramas en reproducciones de video o actuaciones de juegos. En palabras...
Los mejores juegos de Oculus App Lab
Si es propietario de un visor Oculus, debe estar informado sobre la descarga lateral. Sideloading es el proceso de instalación de contenido que no es ...
Los 10 mejores juegos para jugar en Ubuntu
La plataforma Windows ha sido una de las plataformas dominantes para juegos debido al gran porcentaje de juegos que se están desarrollando hoy para ad...