Signale
-
Hallo!
ich arbeite mit sigaction() und habe eine funktion geschrieben die kontrolliert welches signal übergeben wurde und dann dementsprechend etwas ausführt.
wie kann ich jetzt in der main ein SIGINT und ein SIGABRT "feuern". Wenn ich nämlich in der shell ein STRG+C mache passiert gar nichts. Erst nach wiederholtem Drücken kommt dann meine vorgegebene Ausgabe dementsprechend oft.
Bei abort() passiert gar nichts? Wie muss meine main Methode aussehen, damit die Signale korrekt an den signalhandler gegeben werden.Gruß
Manni
-
wenn du ein signal verschicken willst, musst du kill() verwenden. aber ich bin mir nicht ganz sicher, ob du das willst. poste bitte etwas code. grundsätzlich muss die main nicht für signale in irgendeiner art und weise besonders geschrieben werden.
-
also hier ein teil meiner main:
struct sigaction sigActions; sigfillset(&signalSet1); sigActions.sa_sigaction = mySigHandler; sigActions.sa_mask = signalSet1; sigActions.sa_flags = SA_SIGINFO; sigaction(SIGINT, &sigActions, NULL);
ich würd jetzt an sigaction eben auch noch gern was mit SIGABRT übergeben...
aber das geht irgendwie nicht
-
"das geht nicht" ist etwas unspezifisch. gibt sigaction -1 zurück? oder wird der handler bei einem SIGABRT nicht aufgerufen?
-
Morgen,
schau dir mal die Funktionen (2)sigemptyset, (2)sigaddset etc. an, die duerften
das sein, was du suchst.gruss
v R
-
er hat schon sigfillset() verwendet. ob das problem auftaucht, dass er SIGABRT nicht abfangen kann, während er SIGINT abfängt, hat er nicht geschrieben.
-
Also, was ich meine, bei einem SIGABRT passiert gar nichts. Habe in meinem code noch ein abort() stehen, aber auf das wird irgendwie gar nicht reagiert.
Selbst SIGINT macht nicht so recht das, was es soll. Wenn ich das Programm ausführe und dann STRG+C drücke passiert erst mal gar nichts(sollte mir meinem Signalhandler nach eigentlich eine Meldung auf der Konsole ausgeben). Erst wenn ich ganz oft STRG+C drücke kommen die Meldungen auf einen Klatsch.
-
an dem code, den ich bisher gesehen habe, kann ich keinen fehler entdecken. kannst du versuchen, so wenig code wie möglich zu schreiben, ohne dass das problem verschwindet? wenn ja, dann hast du entweder das problem durch wegstreichen von code gefunden, oder kannst den rest hier posten und wir können dein programm bei uns ausprobieren.