OVH Cloud OVH Cloud

Pb de zombie

3 réponses
Avatar
Stéphane Müller
Bonjour,

J'ai écrit un petit serveur HTTP en perl qui tourne sur un serveur unix
(aix) :

use HTTP::Daemon;

my $HTTP = HTTP::Daemon->new(LocalAddr=>'sagiter',LocalPort=>8080)
or die "Cannot start the HTTP Server";

while (my $CON = $HTTP->accept) {
my $Pid = fork;
unless ( $Pid ) {
my $REQ = $CON->get_request;
send_page($CON);
$CON->close;
exit;
}
}

Cela fonctionne si ce n'est qu'après chaque connection client, j'ai un
process zombie qui reste en mémoire. Il semblerait que le process "fils" ne
se termine pas correctement mais je ne vois pas pourquoi.
Auriez-vous une idée ? Merci de votre aide.

Stéphane

3 réponses

Avatar
Nicolas George
"Stéphane Müller" wrote in message <dvopno$ljk$:
Cela fonctionne si ce n'est qu'après chaque connection client, j'ai un
process zombie qui reste en mémoire. Il semblerait que le process "fils" ne
se termine pas correctement mais je ne vois pas pourquoi.
Auriez-vous une idée ? Merci de votre aide.


Chercher « zombie » dans la doc de perl ?

If you "fork" without ever waiting on your children, you will
accumulate zombies. On some systems, you can avoid this by
setting $SIG{CHLD} to "IGNORE". See also perlipc for more
examples of forking and reaping moribund children.

entre autres.

Avatar
Jacques Caron
Salut,

On Tue, 21 Mar 2006 12:57:44 +0100, Stéphane Müller
wrote:

Cela fonctionne si ce n'est qu'après chaque connection client, j'ai un
process zombie qui reste en mémoire. Il semblerait que le process "fils"
ne se termine pas correctement mais je ne vois pas pourquoi.


En plus de la réponse de Nicolas, j'ajoute qu'un zombie n'est pas un
processus qui ne se termine pas correctement, mais un processus qui s'est
terminé, mais qui reste dans la table des processus tant que son "père"
n'a pas récupéré son statut (en appelant wait(2) ou ses dérivés).

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Stéphane Müller
"Nicolas George" <nicolas$ a écrit dans le message de news:
dvorle$v8k$

Chercher « zombie » dans la doc de perl ?

If you "fork" without ever waiting on your children, you will
accumulate zombies. On some systems, you can avoid this by
setting $SIG{CHLD} to "IGNORE". See also perlipc for more
examples of forking and reaping moribund children.

entre autres.


Merci pour la piste, tout fonctionne correctement maintenant.