Frage zu Signalen
-
Moin,
Ich habe ne kurze Frage zum alten Signalkonzept.
void mySignalhandler(){ printf("SIGINT abgefangen."); } void mySignalhandler2(){ printf("Sigterm abgefangen."); } int main(){ signal(SIGINT, mySignalhandler); signal(SIGTERM, mySignalhandler2); while (1); }
Ich schick meine Signale über kill an den Prozess.
Wenn ich SIGINT schicke (z.B. auch wenn ich es über STRG+C schicke) funktioniert es wie erwartet, nämlich es wird der Text: "SIGINT abgefangen" ausgegeben. Wenn ich hingegen SIGTERM schicke, dann kommt erstmal garkeine Ausgabe.
Erst wenn ich nochmal das SIGINT Signal schicke werden plötzlich beide Texte ausgeben, die Ausgabe ist dann halt: SIGTERM abgefangen.SIGINT abgefangen.
Woran liegt das?
-
Mach halt ein fflush(stdout); nach beiden printfs.
-
Das Verhalten sollte sich eigentlich nicht je nach Signal unterscheiden, und tut es bei mir auch nicht.
Damit in beiden Fällen der String auch wirklich ausgegeben wird, reicht es wahrscheinlich schon, ihn jeweils mit einem Zeilenumbruch zu beenden. Außerdem wird die Ausgabe damit schöner und übersichtlicher
-
Danke!
-
laut posix standard sollte man gar kein printf in signalhandlern verwenden, siehe z.b. hier: https://www.securecoding.cert.org/confluence/x/34At. das kann sonst zu sehr hässlichen und schwer reproduzierbaren fehlern führen.
-
HansiDampf schrieb:
alten Signalkonzept
Könnte das vielleicht jmd. näher erläutern, wieso "alten", da wir vor kurzem in der Vorlesung mit dem Thema vertraut wurden.
Was ist das neue Konzept ? Link ?
-
das neue system "ist" die funktion sigaction.