2010-11-18 6 views
3

Ich habe folgendes Problem:Übergeordneter Prozess erfasst nicht alle seine untergeordneten Prozesse

Ich habe Main (Parent) procces, die eine andere Prozesse (Childs) mit Fork-Funktion erstellt. Ich fange den Status eines Kindes an, um Zombies zu eliminieren. Wenn ein untergeordneter Prozess vorhanden ist, wird er korrekt eingefangen. Wenn es jedoch mehr Prozesse (z. B. 30) gibt, die vom übergeordneten Prozess erstellt wurden, gibt es aprx. 4 Zombies links = Eltern erfasst nicht alle Kinder (Status/Status = < nicht mehr vorhanden >).

Kinder Status catched

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

signal(SIGCHLD, selfkill); 

Vielen Dank im Voraus mit.

Antwort

4

Sie sollten wahrscheinlich waitpid() mit WNOHANG in einer Schleife im Signalhandler verwenden.

Was wahrscheinlich passiert ist, dass nicht alle Signale geliefert werden - weil einige von ihnen zu nahe kommen. Sie könnten dieses Problem möglicherweise beheben, indem Sie auch sigaction() anstelle von signal() verwenden.