2010-11-18 42 views
3

J'ai le problème suivant:Le processus parent n'attrape pas tous ses processus enfants

J'ai procces principal (parent), ce qui crée un autre processus (childs) en utilisant la fonction fork. J'attrape le statut de l'enfant pour éliminer les zombies. Quand il y a 1 processus fils, il est correctement saisi, mais quand il y a plus de processus (environ 30) créés par le processus parent, il y a aprx. 4 zombies à gauche = parent n'attrape pas tous les enfants (état de retour/état = < défunt >).

Statut de l'enfant est attrapée à l'aide

void selfkill(int status) { 
    wait(&status); 
} 

signal(SIGCHLD, selfkill); 

Merci à l'avance.

Répondre

4

Vous devriez probablement utiliser waitpid() avec WNOHANG dans une boucle à l'intérieur du gestionnaire de signaux.

Ce qui se produit probablement, c'est que tous les signaux ne sont pas délivrés - parce que certains d'entre eux arrivent trop près l'un de l'autre. Vous pourriez peut-être atténuer ce problème en utilisant sigaction() au lieu de signal(), aussi.