Wie machen Eltern warten, bis alle Kind-Prozesse zu beenden?
Ich hoffe, jemand kann etwas Licht auf, wie man die Eltern warten ALLE Kind-Prozesse zu beenden, bevor Sie fortfahren nach der Gabel. Ich habe die cleanup-code, die ich ausführen möchten, aber die Kind-Prozesse müssen zurück, bevor dies passieren kann.
for (int id=0; id<n; id++) {
if (fork()==0) {
//Child
exit(0);
} else {
//Parent
...
}
...
}
- Finden Sie die pids zurückgegeben, aus all diesen Gabeln besonders hilfreich in Ihre Aufgabe, wenn Sie kümmern sich um das Kind verlassen, und wenn. Ansonsten
wait()
fürn
Zeiten.
InformationsquelleAutor Donatello | 2013-10-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
wait
wartet eine Kind-Prozess beendet und kehrt zurück, der Kind-Prozess istpid
. Bei Fehlern (z.B. wenn es keine Kind-Prozesse)-1
zurückgegeben. Also, im Grunde, den code immer warten für die Kind-Prozesse zu beenden, bis diewait
ing Fehler aus, und dann wissen Sie, Sie sind alle fertig.POSIX definiert eine Funktion:
wait(NULL);
. Es ist die Kurzform fürwaitpid(-1, NULL, 0);
, die unterbricht die Ausführung des aufrufenden Prozesses, bis jede ein Kind-Prozess beendet.Hier, 1. argument von
waitpid
zeigt an, warten Sie für jeden untergeordneten Prozess zu Ende.In Ihrem Fall, haben die Eltern nennen es in Ihrem
else
Zweig.wait
sagt, dass es wartet für one der Kinder zu beenden. Wie @WhozCraig oben erwähnt, müssen Siewait
fürn
Zeiten.Verwenden waitpid() wie folgt:
n
Zeiten (diewaitpid
rufen Sie in der Verzweigung Schleife), dann denke ich, wir bekommen eine serielle Ausführung der Kind-Prozesse, und das ist vielleicht nicht gewünscht. Die Antwort von @adrisons unten sieht gut aus.