wait, waitpid, status und exit

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

wait, waitpid, status und exit
Soweit ich es verstanden hab räumt der Befehl wait(*status) Zombie-Prozesse auf. Der Pointer *status soll ja auf den Exitstatus des Kindprozesses zeigen, aber wie soll das gehen wenn Kind- und Elternprozesse nicht auf den gleichen Speicher zugreifen? Und wozu ist der Parameter überhaupt?


Du legst eine lokale Variable an, in die [m]wait[/m] den Exit-Status schreibt. [m]waitpid[/m] schreibt da auch andere Status rein.


Das stimmt so nicht ganz. [m]wait(2)[/m] und [m]waitpid(2)[/m] schreiben in [m]status[/m] exakt dieselben Werte (siehe auch [m]man 3p wait[/m]). [m]waitpid(2)[/m] ist allerdings flexibler, auf welche Kinder gewartet wird.

[m]man 3p waitpid[/m] für ein Beschreibung was genau alles in [m]status[/m] gespeichert wird. Unter anderem ist das der Exit-Code, wenn sich der Prozess selbst beendet hat.


Joa… ich dachte wenn der Elternprozess [m]wait[/m] aufruft kann der ja nur den Status auslesen, wenn der Kindprozess beendet wurde. Oder wartet die Funktion auch auf andere Statusänderungen?


[m]man waitpid[/m], je nach Flags auch auf andere Statusänderungen.

Allerdings wird nicht nur der Exitstatus zurückgegeben. Sondern auch z.B. das Signal wenn ein Prozess mit einem Signal terminiert hat.