006
01.04.2009, 14:01 Uhr
0xdeadbeef
Gott (Operator)
|
Du solltest die Zombies schon reapen, ja. Es gibt mehrere Möglichkeiten damit umzugehen, die wohl üblichsten sind entweder SIGCHLD abzufangen und wait in einem Signalhandler auszuführen, etwa so:
C++: |
void sighandler_child(int sig) { int *status;
while(waitpid(-1, &status, WNOHANG) != -1); }
// ...
signal(SIGCHLD, sighandler_child);
|
...ein einfacher wait-Call reicht hier nicht, weil SIGCHLD auch geschickt wird, wenn das Kind gestoppt, aber nicht beendet wurde. Die andere übliche Methode ist, für jedes Kind im Vater einen Thread aufzumachen, der dann auf den Kindprozess wartet. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |