Signal-Handler geht nicht

  • Moin!

    Ich möchte die Signale SIGINT und SIGTERM in meiner Anwendung abfangen, um eine Verbindung zu einer per USB angeschlossenen DAB-Empfängerplatine ordnungsgemäß zu beenden (wichtig, wenn der Pi heruntergefahren wird). Nach ein wenig Lektüre entschied ich mich zunächst für die signal()-Funktion:

    Kompiliere ich dieses Programm, lasse es laufen und will es mit ^C abbrechen, kommt aber folgende Meldung:

    Code
    2017-02-26 16:39:17 sigHandler: Unhandled signal 2, terminating

    Der Handler wird also schlichtweg ignoriert.

    Nun habe ich auf der Manpage von signal() eine Warnung gelesen, man solle bei neuen Projekten eher sigaction() nehmen sollte, und diese Anleitung beherzigt: Tap the interrupt signal Nun schaut die main()-Funktion halt so aus:



    Doch helfen tut das auch nicht: Auf ^C reagiert das Progrämmchen genauso wie vorher. :@ Was mache ich hier nur falsch? Wer weiß das? Danke!

  • Servus,
    also der Code:


    funktioniert jedenfalls:

    Ich seh' jetzt bei Dir ehrlich gesagt auch nicht, warum das nicht funktionieren sollte ...

    cu,
    -ds-

  • Das wundert mich jetzt auch enorm! Ich habe mal alles, was in main () nach dem sigaction () steht, auskommentiert, und nach dem auskommentierten Code eine ganz blöde Endlosschleife mit sleep (1) eingehämmert. Es ging. Kommentiere ich jedoch nur eine einzige Zeile ein, nämlich diese hier:

    Code
    ret =  gpioInitialise ();

    …wird der Signal-Handler schon wieder links liegengelassen! Das ist übrigens ein Methodenaufruf aus pigpio.h. Heißt das, pigpio macht etwas mit Signal-Handlern und überschreibt alle vorherigen sigactions? :s

    UPDATE: Dem ist wirklich so! Stellt man nämlich das gpioInitialise () VOR das sigaction (), funzt alles wie nach Lehrbuch. Trotzdem: :danke_ATDE:

    Einmal editiert, zuletzt von Oldsmobile (26. Februar 2017 um 18:21)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!