Esta pagina se ve mejor con JavaScript habilitado

El alzar de los zombies ha llegado

 ·  🎃 kr0m

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:

vi zombie.c

#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.

cc zombie.c -o 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:

kill -9 21646
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:

cat /proc/21646/stat|awk -F " " ‘{print$4}’

21645

Acabamos con el padre:

kill -9 21645

Con esto nos habremos deshecho del proceso zombie ;)

Si te ha gustado el artículo puedes invitarme a un RedBull aquí