¿Qué son los procesos Zombie en Linux y cómo eliminarlos?

Proceso zombi. No todo el mundo ha oído hablar de esta palabra interesante pero aterradora relacionada con el sistema operativo Linux. En una computadora personal, los procesos zombie pueden no ser una amenaza para un usuario normal, pero cuando se trata de servidores Linux, estos procesos deben identificarse y detenerse.

Dichos procesos pueden causar problemas con la tabla de procesos de su sistema y, a su vez, alterar el correcto funcionamiento de su máquina. Por lo tanto, en este artículo, analizaremos los procesos zombie en detalle, junto con una guía completa sobre cómo encontrar y eliminar procesos zombie en una máquina Linux.

¿Qué son los procesos Zombie?

Pero antes de todo eso, es importante que sepas qué son realmente los procesos zombies. Estos no son más que procesos muertos y difuntos que ocupan espacio en la tabla de procesos del sistema. Un bloque de control de procesos o PCB es una estructura de datos que almacena detalles asociados con procesos individuales que se ejecutan en su sistema.

La tabla de procesos consta del ID del proceso, un enlace a la PCB y otra información útil relacionada con el proceso. Los procesos Zombie tienen sus propios ID de proceso e información de administración de memoria. Dado que el sistema operativo Linux tiene un número limitado de ID de proceso disponibles, otros procesos no pueden usar los PID hasta que se detenga el proceso zombie.

Aunque uno o dos procesos zombies no causarán interrupciones o problemas de rendimiento en su computadora, una gran cantidad de estos procesos pueden dañar el flujo de trabajo de su sistema al inundar la tabla de procesos y los recursos.

¿Qué causa los procesos zombies en Linux?

Para comprender la causa subyacente de un proceso zombi en detalle, tendrá que aprender cómo los procesos se inician y se detienen en Linux. El sistema operativo Linux monitorea todos los procesos y demonios en ejecución en una computadora. La tabla de procesos es una lista de estructuras que contiene todos los procesos que se están ejecutando actualmente en su máquina.

Cada entrada de proceso en la tabla de proceso consta de un enlace al bloque de control de proceso de ese proceso específico. La PCB almacena los detalles asociados con ese proceso en particular. Estos detalles incluyen:

  1. Estado del proceso : el estado actual del proceso.
  2. Número de proceso : un número único que se utiliza para identificar el proceso.
  3. Contador de programa : contiene información relacionada con la siguiente instrucción
  4. Registros : Lista de todos los registros de CPU utilizados por el proceso.
  5. Abrir lista de archivos: archivos usados ​​por el proceso
  6. Información de programación de la CPU : contiene información asociada con el tiempo de la CPU y los recursos asignados al proceso.
  7. Información sobre la gestión de la memoria : incluye detalles sobre la cantidad de memoria utilizada por el proceso.
  8. Información de E / S : lista de dispositivos de entrada o salida utilizados por el proceso

Linux utiliza los siguientes estados de proceso para describir todos sus procesos.

  • R : proceso en ejecución
  • S : proceso de dormir
  • D : proceso de sueño ininterrumpido
  • T : proceso terminado
  • Z : proceso Zombie

Siempre que un proceso completa la tarea asignada, su estado de proceso se establece como Zombie o Z. Cada proceso tiene un proceso padre que llama a una familia de funciones llamadas wait () que espera el cambio de estado de un proceso. Por ejemplo, si el estado del proceso cambia de Running a Zombie , se activará el método wait () .

El método wait () generalmente elimina el bloque de control de proceso relacionado con ese proceso zombie y luego elimina la entrada de ese proceso de la tabla de procesos.

Pero a veces, debido al desarrollo deficiente de un programa, el proceso padre no llama a la función wait () . Y como resultado, el sistema no elimina la PCB del proceso zombie. La entrada de la tabla de procesos para ese proceso específico también permanece intacta.

Esto le otorga al proceso zombie una vida útil infinita. Dado que el sistema no puede detener el proceso, la entrada del proceso nunca se elimina y el PID nunca se libera.

Más información: Formas de eliminar programas que no responden en Linux

¿Cómo encontrar procesos zombies?

El primer paso para eliminar los procesos zombie en su sistema es analizar qué proceso tiene el estado de proceso Zombie . Si bien no podrá eliminar estos procesos directamente porque el sistema ya los eliminó de la memoria, puede eliminar el proceso principal asociado con ellos.

Primero, debe verificar si la tabla de procesos de su sistema tiene un proceso zombie. Puede hacerlo fácilmente usando el comando superior . Simplemente abra su terminal y escriba:

 top

Verá una salida similar a esta. Observe el recuento de procesos zombies en la parte superior de la ventana de la terminal. Si la salida es cero, entonces no tiene nada de qué preocuparse.

Puede enumerar información relacionada con estos procesos zombies mediante la canalización del comando ps con egrep . Egrep es una extensión del comando grep en Linux que trata todos los patrones como una cadena de expresiones regulares extendida.

Relacionado: La guía para principiantes de expresiones regulares con Python

Escriba el siguiente comando para enumerar todos los procesos zombies:

 ps aux | egrep "Z|defunct"

El comando antes mencionado buscará líneas que contengan Z o desaparecidas en la salida generada por el comando ps. La salida consiste en una lista de los procesos zombis que se ejecutan en su sistema.

Matar procesos zombis usando el comando kill

Ahora que sabe qué procesos zombies están consumiendo los recursos de su sistema, es hora de eliminar estos procesos.

Si bien la forma más fácil de eliminar los procesos zombies es reiniciando su computadora, a veces esta no es una opción factible, especialmente si está administrando un servidor.

Para matar procesos zombies sin apagar su servidor, anote el ID de proceso de cualquier proceso zombi. De la sección anterior, podemos ver que el PID del proceso zombie era 18614. Luego, use este PID para encontrar el ID del proceso padre.

 ps -o ppid= -p 18614

Producción:

 18613

Verifique si existe el ID del proceso principal mediante el comando ps .

 ps -e | grep 18613

Ahora que hemos confirmado la existencia del proceso padre, es hora de acabar con él. Pase la bandera -SIGKILL con el comando kill de la siguiente manera:

 sudo kill -SIGKILL 18613

Una vez que haya eliminado el proceso principal, el sistema eliminará el proceso zombie y lo eliminará de la tabla de procesos automáticamente.

Administrar procesos de manera eficiente en Linux

Cada administrador de sistema debe priorizar los procesos de monitoreo que se ejecutan en una máquina Linux. Aunque los procesos zombie no son necesariamente dañinos para su sistema, pueden causar problemas de rendimiento si existen en un gran número.

Si eres un usuario principiante de Linux y no tienes idea de cómo el sistema operativo Linux gestiona los procesos, aprender primero qué son los procesos es un buen punto de partida.