Der Beendigungsstatus des untergeordneten Prozesses ist der Wert, der über den Systemaufruf exit()
(oder _exit()
) an den übergeordneten Prozess zurückgegeben wird. Dies ist eine einfache Ganzzahl, die normalerweise den Erfolg oder das Fehlschlagen des untergeordneten Prozesses angibt, wobei Null (per Konvention) den Erfolg angibt.
SIGCHLD ist ein Signal, das an den übergeordneten Prozess gesendet wird, wenn das Kind beendet wird. Es benachrichtigt den wartenden Elternteil einfach, dass das Kind beendet wurde.
Eine Kombination der beiden wird verwendet, um die Ausführungsergebnisse des untergeordneten Prozesses an den übergeordneten Prozess zu übermitteln. Das Signal teilt dem übergeordneten Element mit, wenn das untergeordnete Element beendet wurde, und der Beendigungsstatus teilt dem übergeordneten Element mit, was die Ausführungsergebnisse des untergeordneten Elements sind. Das übergeordnete Element kann den Beendigungsstatus des Kindes nicht abrufen, bis es ein Signal (oder eine Rückgabe von wait()
oder waitpid()
) erhält, das angibt, dass das Kind beendet wurde.
Das Kind kann sein Ausführungsergebnis auf verschiedene Weisen an seinen Elternteil zurücksenden (verschiedene IPC-Mechanismen, Datei-I/O usw.), aber die einfachste Art ist die Verwendung von exit()
und wait()
, um einen Integer-Statuscode von Kind an zu senden Elternteil.
Wenn es dem übergeordneten Prozess egal ist, was der untergeordnete Ausführungsstatus ist, kann er einfach den Beendigungscode des untergeordneten Elements ignorieren, das von wait()
zurückgegeben wird. Auf der anderen Seite müssen komplexe Systeme möglicherweise wissen, was der Exit-Status ist, um eine neue Instanz des Kindprozesses erneut zu starten (fork()
) oder vielleicht ein anderes Programm auszuführen, wenn der Kindprozess (oder nicht) abgeschlossen wurde seine Aufgabe richtig.
Mögliches Duplikat von [Wie erhält der Elternprozess den Beendigungsstatus durch Warten von einem untergeordneten Prozess, der \ _exit aufruft (http://stackoverflow.com/q/6749475). Siehe auch [Capture exit Statuscode des untergeordneten Prozesses] (http://stackoverflow.com/q/27306764) und [Muss ich etwas mit einem SIGCHLD-Handler tun, wenn ich nur wait() verwende, um auf 1 Kind zu warten fertig zu einer Zeit?] (http://stackoverflow.com/q/18437779) – jww