Hallo Tom,
Noch eine kleine nachgeschobene Frage: Welches Signal wird an einen Prozess geschickt, der auf der Shell im Vordergrund läuft, wenn man Strg+C drückt?
Eigentlich wird nur das Break-Flag gesetzt durch das Ctrl-C, und die Standard-Output-Routine (Input auch? Weiß ich jetzt nicht auswendig) des Prozesses prüft das bei jedem Schleifendurchlauf. Sollte das Flag gestzt sein, wird zum Exit-Handler verzweigt.
Nein. Laut POSIX.1 wird auf Grund der Tastenkombination "Interrupt" das Signal SIGINT ausgelöst - sonst nichts. Das Signal hat die Default-Aktion "Prozess beenden", kann aber überschrieben werden (im Gegensatz zu SIGKILL).
Allgemein: Was hast Du ständig mit Exit-Handlern? Wenn Du C unter POSIX.1 betrachtest: Wenn exit() aufgerufen wird oder die Main-Methode zurückkehrt, werden alle mit atexit() registrierten Exit-Handler ausgeführt (Reihenfolge ist meines Wissens jedoch nicht garantiert), wenn _exit() aufgerufen wird oder der exit-Syscall, werden die exit-Handler ignoriert und der Prozess instantan beendet. Und die PHP-Exit-Handler, die über register_shutdown_function registriert werden, sind etwas vollkommen anderes.
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