Viernes, Abril 23, 2021

Detectar un proceso zombie y eliminarlo

z

De vez en cuando un proceso de GNU/Linux se pierde y no hace nada, ni siquiera interfiere en los ciclos de la CPU. Aunque los zombis no utilizan recursos valiosos (como una aplicación en funcionamiento y maliciosa), puede suponer una amenaza. ¿Cómo? Cuando un proceso se convierte en zombie, conserva su ID de proceso (PID). Dado que los sistemas GNU/Linux tienen un número finito de PIDs (aunque ese número es bastante alto), en caso de que muchos procesos se vuelvan zombies no habrían suficientes PIDs y ningún otro proceso podría iniciarse. No te preocupes, esto es una teoría porque en realidad que ocurriese esto sería rarísimo.

Las posibilidades de que eso ocurra son muy pocas. Sin embargo, lo que es más importante, los procesos zombies indican que algo ha ido mal con una aplicación, y puede haber un error en un programa en particular. Los errores en el software del centro de datos no deben ser tolerados y deben ser corregidos. Hasta que se resuelva el problema, es posible que quieras comprobar y eliminar los procesos zombis.

Así que cuando un proceso se convierte en zombie, ¿qué hacemos? Encuentra y mata esos procesos. Déjame mostrarte cómo.

Encontrar un zombie

Lo primero que hay que hacer es encontrar el proceso zombie. Afortunadamente, esto es muy fácil, gracias a la orden ps. Veremos la salida de ps a través de grep para listar cualquier proceso cuyo STAT (estado) sea Z (de zombie).

Abre una ventana de terminal y emite la siguiente orden:

ps aux | grep Z

La salida de la orden de arriba listará cualquier proceso que incluya Z en la salida.

z

Como puedes ver, no hay ningún proceso en ejecución que tenga un estado zombie. Esta orden también listará cualquier proceso que incluya la letra Z en la salida, por lo que deberás ignorar cualquier cosa que no tenga una Z en la columna STAT.

Matar a un zombie

En lugar de decapitar, quemar o desmembrar completamente al zombi, queremos usar la orden de matar, kill para acabar con esos procesos zombis. La salida de la primera orden incluirá el PID de todos los procesos zombis, así que para matar a uno de ellos, debes emitir:

kill PID

En mi caso no tengo procesos zombies, pero aquí un ejemplo:

kill

Donde PID es el ID de proceso del proceso en cuestión. Así que si quieres matar el proceso zombie evolution (suponiendo que el PID por ejemplo es 18680), la orden sería:

kill 18680

Si ves, algo que es siempre algo entraño, muchos procesos zombies, en lugar de ir matando uno por uno, usa esta orden:

kill -s SIGCHLD $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

Y eso es todo.

Podrías pensar en crear un guión de bash para encargarse de esto automáticamente, sin embargo es mala idea, correrías el riesgo de matar un proceso necesario. Debido a ese riesgo, siempre recomiendo encargarse de esta tarea manualmente.

Si encuentras servicios y aplicaciones que se te caen, deberías comprobar si hay procesos zombis y deshacerte de ellos. Una vez que sepas qué procesos están siendo zombies, presente un informe de fallo o ponte en contacto con el desarrollador y háselo saber (especialmente si esto se convierte en una ocurrencia regular para una aplicación).

 

Fuente: maslinux

Compártelo. ¡Gracias!

 
Grupo Digital de Ayuda! Laboratorio Linux! - Linux para todos.

¿Quién está en línea?

Hay 94 invitados y ningún miembro en línea

Contador de Visitas

11625446
Hoy Hoy 903
Ayer Ayer 3737
Esta semana Esta semana 16160
Este mes Este mes 80245
Total de Visitas Total de Visitas 11625446

Día con más
visitantes

04-19-2021 : 3976

Gracias por su visita