Thread fork - wie vermeide ich zombies, wenn child länger als der parent läuft?
(4 answers)
Opened by Martin at 2010-11-09 16:30 Guest Martin Dieser Absatz macht für mich keinen Sinn. Stirbt der Vater eines Prozesses, wird PPID des Kindes auf 1 gesetzt. D.h. der Init-Prozess erbt das verwaiste Kind. Bisher gibt es keinen Zombie. Stirbt nun das Kind, kriegt der Init-Prozess ein SIGCHLD und liest daraufhin die Status-Info des Verstorbenen. Solange Dein Init-Prozess also funktioniert, kann es zwar Zombies geben, aber nur für den kurzen Moment zwischen dem Ableben des Kindes und dem Einsammeln der Status-Info durch den Init-Prozess. Das ist unabhängig von irgendwelchen Einstellungen in %SIG. Etwas anderes ist es, wenn der Vater lange läuft und waitpid für seine verschiedenen Kinder vergisst. Dabei entstehen länger lebende Zombies. In diesem Fall hilft unter Linux $SIG{CHLD}='IGNORE'. Unter vielen anderen Unices funktioniert das aber auch nicht. Das bedeutet nämlich eigentlich nur, Du bist nicht interessiert an dem Signal, nicht dass Du die Status-Info selbst nicht brauchst. |