• Publicidad

Procesos zombies en AIX

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Procesos zombies en AIX

Notapor pbellon » 2013-05-23 05:59 @291

Intento lanzar procesos en paralelo mediante fork() en un servidor AIX y se quedan procesos zombis. El programa principal no debe finalizar nunca.

¿Cómo puedo evitar estos procesos zombis?
Hasta que no mato el programa principal permanecen.

------------------ PROGRAMA PRINCIPAL --------------------------------------
$interval = 60;
$mifile = "...";

# Cada registro del fichero será del tipo: hh:mm,accion_a_ejecutar

######################################
# M A I N
######################################
while (1){
$hh = sprintf("%02d",(localtime)[2]);
$mm = sprintf("%02d",(localtime)[1]);

# Se procesa las acciones
open F,"$mifile";
while (<F>){
($hora,$accion) = split(",",$_);
if ($hora eq "$hh:$mm"){
my $pid = fork();
if ($pid == 0){
exec "hijo.pl $accion";
exit(0);
}# fin if
}# fin if
}# while
close f;

sleep($interval);
}# while (1)
exit;


--------------- PROCESO HIJO ---------------------------
##############################
# hijo.pl
##############################
$texto = shift(@ARGV);
print "Se ha recibido el texto: $texto\n";
exit 0;
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325

Publicidad

Re: Procesos zombies en AIX

Notapor explorer » 2013-05-23 09:36 @441

Según perldoc -f fork:
Código: Seleccionar todo
    fork    ...

            Si usted hace un "fork" sin luego esperar a sus hijos, irá
            acumulando zombis. En algunos sistemas, puede evitar esto
            poniendo $SIG{CHLD} a "IGNORE". Ver también perlipc para más
            ejemplos de fork y borrado de hijos moribundos.

Quizás te sea tan sencillo como lo que dice ahí, para evitar a los zombis.

En perlfork comentan algo de llamar a exec() desde un hijo, diciendo que el PID del proceso llamado por exec() no coincidirá con el PID del proceso hijo. Yo, en vez de poner un exec() seguido de un exit(), lo pondría con un system() seguido de un exit().

En perlipc te comentan todas las opciones para crear procesos hijos, esperar a que mueran (o no), y evitar la zombificación.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Procesos zombies en AIX

Notapor pbellon » 2013-05-30 02:35 @149

He probado con

$SIG{CHLD}="IGNORE";

y funciona perfectamente.

Gracias.
pbellon
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2004-10-22 06:48 @325


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron