En Linux hay ocasiones en las que un proceso termina en estado de zombie, esto es debido a que el proceso hijo ha terminado su ejecución pero el padre encargado de monitorizar el estado de su hijo no lo está haciendo. En este artÃculo aprendermos como localizar el proceso padre para poder deshacernos a su vez del hijo, todo explicado mediante un secillo programita escrito en C.
Podemos compilar un sencillo programa que hace precisamente esto:
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main ()
{
pid_t child_pid;
child_pid = fork ();
if (child_pid > 0) {
sleep (60);
}
else {
exit (0);
}
return 0;
}
Este programita crea un proceso hijo mediante el fork, espera 60 segundos, es durante este periodo en el que el padre está en sleep por lo tanto no sabe nada de sus hijos y el proceso del fork está en estado zombie.
./zombie
ps aux|grep zombie
XX 21646 0.0 0.0 0 0 pts/0 Z+ 11:36 0:00 [zombie] <defunct>
Podemos comprobar que no es posible matarlo:
ps aux|grep zombie
XX 21646 0.0 0.0 0 0 pts/0 Z+ 11:36 0:00 [zombie] <defunct>
Primero debemos localizar a su padre:
21645
Acabamos con el padre:
Con esto nos habremos deshecho del proceso zombie ;)