Matando los zombies que residen en tu Linux….
Los procesos son programas en ejecución. Cada software puede iniciar uno o más procesos que se tendrán que cargar en la memoria principal para su procesamiento por la CPU. En ocasiones, un proceso puede subdividirse en los llamados LWP o procesos ligeros, es decir, en hebras, hilos o threads, como los quieras llamar. Cuando todos los threads de un proceso se han ejecutado, entonces el proceso se ha finalizado.
Hecha esa introducción, decir que los procesos en los entornos Unix se identifican por un ID y pueden tener varios estados. Ese ID o identificador es un número asignado a dicho proceso para poder hacer un seguimiento. Se puede conocer fácilmente el PID de un proceso con la herramienta ps, htop, entre otras herramientas. Y también se puede apreciar información sobre su estado.
Los estados en los que puede estar un proceso en Linux son:
- Running: el proceso está en ejecución.
- Sleeping: el proceso está durmiendo, a la espera de que suceda un evento que lo despierte y continúe su ejecución.
- Terminating: el proceso se ha terminado o muerto.
- Device I/O: procesos de dispositivos de E/S que no se pueden interrumpir.
- Zombie: cuando un proceso hijo termina antes que su proceso padre se mantiene la información del hijo hasta que le padre termina también. El hijo realmente está muerto o terminado, pero no puede ser destruido para liberar recursos. Realmente no ocupa tiempo de CPU, pero si espacio en la tabla de procesos.
Una forma de enviar señales a los procesos para que pasen a un estado u otro es mediante el comando kill. Si usas el comando kill -l verás la lista de señales que puedes enviar. Lo más típico es enviar una señal KILL a un proceso para eliminarlo. Por ejemplo:
kill -l kill -9 <PID>
La señal 9 o SIGKILL directamente mata al proceso señalado por PID sin comprobar el estado. En cambio, SIGTERM terminará el proceso solo en ciertas circunstancias, ya que sí comprueba el estado del proceso al que se le envía la señal y si no es seguro se ignorará la señal.
Bien, una vez dicho todo eso, las herramientas como ps tienen una columna que muestra el STAT o estado del proceso. Si te fijas en esa columna, aparece la inicial del estados en el que se encuentra. Por ejemplo, S para sleeping, o Z para zombie, etc. Puedes comprobar si tienes o no procesos zombie en tu sistema con el siguiente comando:
ps aux | grep 'Z'
En mi caso, había uno con PID 6393. Y para eliminar los procesos zombie, puedes usar la siguiente orden:
kill 6393