Hallo Tom,
Und wenn Du ein "Kill -9" gibst, wird das alles ignoriert und sofort die Exit-Methode des parent aufgerufen.
Nein. Wenn ein Prozess mit kill -9 gekillt wird, ist er sofort weg, außer, er hängt in einem ungünstigen Systemaufruf fest. Der Parent-Prozess kriegt zwar ordnungsgemäß ein SIGCHLD (oder SIGCHILD - bin jetzt zu faul, nachzuschlagen, welches der beiden POSIX.1 ist), aber das hat nichts mit Exit-Handlern zu tun.
So ganz bin ich damit noch nicht einverstanden.
Wenn Du ein kill -9 gibst, wird die Kontrolle sofort an den übergeordneten Prozess zurückgegeben.
Nein. Wenn Du kill -9 machst, dann wird der Child-Prozess schlichtweg entfernt. Kontrolle hat immer der Prozess, der gerade durch das präemptive Multitasking dran ist, der Parentprozess kann zwar zufälligerweise direkt danach dran sein, muss aber nicht.
Dies kann aber nicht duech den Chlied-Prozess geschehen, denn wenn der außer Kontrolle geraten ist, würde der alles andere machen, aber nicht auf Signale reagieren.
Der Prozess bekommt das SIGKILL eh nicht zu gesicht. kill() ist eine Systemfunktion unter UNIX, die 2 Parameter erwartet: Die Prozess-ID und die Signal-Nummer. Diese Systemfunktion wird vom Kernel ausgeführt. Wenn der Kernel ein SIGKILL sieht, dann wird der Prozess ganz einfach restlos entfernt, der Prozess bekommt SIGKILL gar nicht zu Gesicht. Nur die Taskstruktur bleibt erhalten, bis der Parent-Prozess wait() oder waitpid() aufruft, um den Exit-Status des Prozesses zu erhalten.
Das kill -9 kann sich also nur direkt an den Gatekeeper des Childprozesses richten, und der gehört dem Parent.
Was bitteschön soll ein Gatekeeper sein?
Tom, bitte, wenn Du keine Ahnung von UNIX-Systemprogrammierung hast, halte Dich da bitte raus.
Viele Grüße,
Christian
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup