Ich habe eine harte Zeit mit einem kleinen Stück Code mit:raise() in while-Schleife
act_therm.sa_handler=handler_therm;
sigaction(SIGUSR1,&act_thermom,NULL);
while(1){
raise(SIGUSR1);
sleep(1);
}
Der Code kompiliert perfekt, aber die Funktion handler_term wird nur einmal gestartet. Es scheint, dass das Verhalten des Signals auf den Standardwert zurückgesetzt wird, nachdem es zum ersten Mal ausgelöst wurde.
Ich habe das Gefühl, dass sobald der Signal-Handler aufgerufen wird, die Standard-Aktion wiederhergestellt wird, wenn Sie nicht mit den anderen Teilen der 'act_therm'-Struktur herumspielen. Vielleicht habe ich die Handbuchseite [sigaction] (http://man7.org/linux/man-pages/man2/sigaction.2.html) –
gelesen und versucht, sigaction hinzuzufügen (SIGUSR1, & temp, NULL); in der While-Schleife und es ist Arbeit. Wie wenn sigaction nur einmal funktioniert ... –
Das Problem kann auch im Handler selbst auftreten, siehe [Minimal Complete Verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). – user3386109