Cómo encontrar y matar un proceso de zombie en Linux

Cómo encontrar y matar un proceso de zombie en Linux
Un zombie es una criatura que era humana y murió, pero de alguna manera debido a un virus o cualquier razón por la que se despertó nuevamente. Ya está muerto pero está caminando y moviéndose. Este es el concepto de un zombie descrito en películas y novelas. De la misma manera en Linux, un proceso de zombie es un proceso que se eliminó del sistema como "desaparecido", pero aún así se ejecuta de alguna manera en la memoria del sistema se llama proceso zombie. Hasta que se elimine el proceso de un niño de una tabla de proceso, se convierte primero en un zombie.

Un proceso en el estado terminado es otro nombre para ello. Se limpia de la memoria utilizando su proceso principal. Cuando el proceso principal no se notifica al cambio, el proceso infantil se convierte en el proceso zombie y no recibe ninguna señal de terminación para que pueda dejar la memoria. En Linux, cada vez que se elimina un proceso de la memoria, su proceso principal se informa sobre la eliminación. Este proceso permanece en la memoria hasta que notifica su proceso principal.

Esto significa que el proceso muerto no se elimina de la memoria de inmediato y continúa en la memoria del sistema, convirtiéndose en un proceso zombie. Para eliminar un proceso zombie, el proceso principal llama a la función Wait (). Una vez que la función Wait () se llama en juego, el proceso Zombie se elimina por completo del sistema.

Matar un proceso de zombie

Antes de mudarnos para matar el proceso zombie, primero discutiremos los riesgos del proceso de zombie y las causas del proceso de zombie que tiene lugar. Además, aprenderemos más sobre el proceso de zombie para facilitar la comprensión del proceso de asesinato.

¿Cuál es la causa del proceso de zombie?

Puede haber dos causas principales del proceso de zombie. El primero es el que el proceso principal no puede llamar a la función Wait () cuando el proceso de creación de niños se ejecuta, lo que lleva a ignorar el SigChld. Esto puede causar el proceso zombie. El segundo es el que la otra aplicación puede afectar la ejecución del proceso principal debido a la mala codificación o contenido malicioso en ella.

En otras palabras, podemos decir que el proceso de zombie es causado cuando el proceso principal ignora el estado del proceso del niño cambia o no puede verificar el estado del proceso del niño, cuando termina el proceso infantil, la PCB no está borrada.

¿El proceso zombie representa un riesgo?

El proceso de zombie no representa ningún riesgo, solo usan alguna parte de la memoria en el sistema. La tabla de proceso es de pequeño tamaño, pero la identificación de la tabla donde se almacena el proceso zombie no se puede usar hasta que el proceso zombie lo libere. Pero en caso de que haya muchos procesos de zombis que reserven la ubicación de la memoria y no quede espacio de memoria para que se realicen otros procesos, se vuelve difícil para otros procesos.

Encontrar un proceso de zombie

Antes de matar el proceso zombie es necesario encontrarlos. Para encontrar el proceso de zombie ejecutaremos el siguiente comando en el terminal:

linux@linux-virtualbox: ~ $ ps aux | egrep "z | difunto"

En el comando anterior, "PS" significa el estado del proceso que se utiliza para ver el estado del proceso que se ejecuta en el sistema junto con el comando PS. Pasamos el Aux de la bandera en el que "A" indica los detalles de todos los procesos asociados en el terminal, "u" indica los procesos que están en la lista de usuarios y la "x" indica los procesos que no se ejecutan desde el terminal. En combinación, podemos decir que se usa para imprimir todos los procesos de ejecución que se almacenan en la memoria.

La segunda opción aprobada "EGREP" es una herramienta de procesamiento que se utiliza para obtener las expresiones o patrones en una ubicación especificada. Por último, pasamos la palabra clave "z | difunto" que denota el proceso zombie que se debe obtener en la memoria. Cuando ejecutamos el comando, obtendremos la siguiente salida, que muestra el proceso de zombie en el sistema junto con su "PID".

Producción:

Usuario PID %CPU %MEM VSZ RSS TTY STAT TIME DE TIEMPO DE TIEMPO
Linux 33819 0.0 0.0 18008 724 pts/0 s+ 20:22 0:00 Grep -e - -Color = Auto Z | Excuto

Los procesos de zombie ya son procesos muertos, pero el proceso principal no puede leer su estado y no se puede liberar de la memoria. Entonces, el proceso muerto no puede ser asesinado. Solo podemos hacer para que permitan que el proceso principal lea el estado infantil para que pueda ejecutarse y eliminarse de la tabla de proceso. Para esto, ejecutaremos el comando mencionado a continuación.

linux@linux -virtualbox: ~ $ ps -o ppid = -p 33819

En el comando anterior, intentamos obtener la identificación principal del proceso zombie. Después de obtener la ID de los padres, ejecutaremos el siguiente comando para matar el proceso de zombie enviando el SigChld al proceso principal que permite al proceso principal leer el estado infantil:

linux@linux -virtualbox: ~ $ kill -s sigchld parent_pid

En el comando anterior, pasamos la señal a la identificación de los padres para matar el proceso zombie de la identificación de los padres que se le pasó a. Después de ejecutar el comando anterior, simplemente se moverá a la siguiente línea sin imprimir ninguna salida en el terminal en caso de que no exista ID de padre. Para verificar el proceso si el proceso de zombie es asesinado o no, puede ejecutar el comando que ya ejecutamos para encontrar el proceso de zombie.

Intentemos otra forma de matar el proceso de zombie que se realiza matando el proceso principal en sí mismo. Esta es la forma más eficiente de matar el proceso de zombie porque eliminará por completo todo el proceso y no permitirá que el zombie vuelva a surgir. Para eso, ejecutaremos el comando a continuación:

linux@linux -virtualbox: ~ $ kill -9 parent_pid

Después de ejecutar el comando anterior, permitimos que el sistema mate el proceso principal.

Conclusión

Hemos discutido brevemente el proceso de zombis y también las causas y el procedimiento para matar estos procesos. Antes de dirigirnos a nuestro proceso de asesinato, tratamos de explicar las razones de su causa y también las formas de identificarlos usando comandos simples.