Hallo Andre,
statt der waitpid schreibst Du was Dein Hauptprogramm machen soll,
während der Kindprozess läuft.
Vor dem fork fügst Du folgenden Zeile ein:
1 | signal(SIGCHLD,Handler);
|
Die folgende Funktion kommt vor main
1 | void Handler(int n) {
|
2 | /* Zombies entfernen */
|
3 | wait3(NULL,WNOHANG,NULL);
|
4 | }
|
Ein Kind das sich beendet erzeugt ein SIGCHILD-Signal, das üblicherweise
ignoriert wird. Durch die signal...-Zeile richtest Du ne Handler für
SIGCHLD ein. Die Funktion Handler wird jedesmal aufgerufen, wenn sich
ein Kind beendet. So wirst Du die Zombies los und kannst im
Elternprozess noch was "sinnvolles" machen.
Rayray