Zu guter Letzt wollen wir uns noch eine Besonderheit des Signals SIGCHILD anschauen, das immer
dann auftritt, wenn sich eine Statusänderung an einem Kindprozess ergibt.
Was uns nämlich interessiert ist, was passiert, wenn ein Kindprozess stirbt.
Nämlich wird dem Elternprozess immer dann ein SIGCHILD zugestellt, wenn ein Kindprozess
stirbt.
Dies können wir nutzen, um anfallende Zombieprozesse sofort aufzusammeln.
Dafür gibt es verschiedene Möglichkeiten.
Die erste ist, dass wir eine eigene Signalbehandlung implementieren und darin, immer wenn ein
SIGCHILD auftritt, explizit WAITPAID aufrufen, um den angefallenen Zombie aufzusammeln.
Dabei müssen wir beachten, dass wir das WAITPAID in einer Schleife ausführen müssen, da
während der Ausführung der Signalbehandlung weitere Kindprozesse sterben können und dies
nicht auffallen würde, da die Signalzustellung von SIGCHILD blockiert ist.
Eine weitere Möglichkeit ist, dass wir die Signalbehandlung von SIGCHILD auf SIGDefault
setzen und dabei in den SAFLAGS die Option SANoChildWAIT setzen.
Damit weisen wir den Kernel an, Kindprozesse sofort aufzuräumen.
Ähnlich sieht es aus, wenn wir die Option SIGIgnore explizit nochmal setzen.
Auch dann wird der Kernel angewiesen, Anfallen der Zombie-Prozesse sofort zu beseitigen.
Zugänglich über
Offener Zugang
Dauer
00:01:35 Min
Aufnahmedatum
2020-11-15
Hochgeladen am
2020-11-15 19:27:56
Sprache
de-DE