Matando zombies en el sistema

Puede ser que por algun motivo algun proceso deje de responder y al tratar de ver que le pasa y probar ps ax | grep proceso vemos que dice [proceso] < defunct > al final de la linea. Esto quiere decir que el proceso murio pero dejo todo el entorno y por lo tanto es un proceso zombie, por mas que intentemos matarlo con kill seguira ahi, de hecho ya esta muerto… por lo que es perder el tiempo tratar de usar kill, killall, pkill y cualquier otro que se nos ocurra, en vez de eso ejecutamos ps xal | grep defunct lo cual nos dara una linea similar a:

Code:
[vampird@sharwyn]:~$ ps xal | grep defunct
1  1000  9990  9989  20   0      0     0 exit   Z+   pts/0      0:00 [zombie] <defunct>
0  1000  9994  9965  20   0   7668   808 pipe_w S+   pts/3      0:00 grep --color -i defunct
[vampird@sharwyn]:~$

si ejecutamos ps xal | head:

Code:
[vampird@sharwyn]:~$ ps xal | head
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0     1     0  20   0  12408   584 ?      Ss   ?          0:00 init [5]           
1     0     2     0  20   0      0     0 kthrea S    ?          0:00 [kthreadd]
1     0     3     2 -100  -      0     0 migrat S    ?          0:00 [migration/0]
1     0     4     2  20   0      0     0 run_ks S    ?          0:00 [ksoftirqd/0]
5     0     5     2 -100  -      0     0 watchd S    ?          0:00 [watchdog/0]
1     0     6     2 -100  -      0     0 migrat S    ?          0:00 [migration/1]
1     0     7     2  20   0      0     0 run_ks S    ?          0:00 [ksoftirqd/1]
5     0     8     2 -100  -      0     0 watchd S    ?          0:00 [watchdog/1]
1     0     9     2  20   0      0     0 worker S    ?          0:00 [events/0]
[vampird@sharwyn]:~$

veremos que la primer linea dice que la cuarta columna es el PID del proceso padre, por lo que ahora si podemos matar al zombie si ejecutamos kill -9 PPID, en el ejemplo:

Code:
[vampird@sharwyn]:~$ kill -9 9989

Si quieren probarlo les dejo un ejemplo de como crear un proceso zombie (si, busque como crear un zombie)

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);   
   } // if   
   return 0;
} // main

Se compila con:

Code:
[vampird@sharwyn]:~$ cc zombie.c -o zombie

Una vez compilado hay que ejecutarlo en una terminal y luego pasarse a otra

=-=-=-=-=
Powered by Blogilo

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: