Signal handling insb. SIGUSR1
-
Ich zeige einfach mal den code:
sigset_t signal_set; void* signal_thread(void* data) { // Block thread signals int sig; sigset_t sigs; sigset_t oldSigs; sigfillset(&sigs); pthread_sigmask(SIG_BLOCK, &sigs, &oldSigs); // Wait for SIGINT + SIGTERM + SIGUSR1 Pos1: sigwait(&signal_set, &sig); if(sig == SIGUSR1) { printf("SIGUSR1 received, reloading config...\n"); goto Pos1; } printf("Signal received, shutting down...\n"); g_Shutdown = TRUE; return NULL; } void install_signal_handler() { pthread_t tid, tid2; sigemptyset(&signal_set); sigaddset(&signal_set, SIGINT); sigaddset(&signal_set, SIGTERM); sigaddset(&signal_set, SIGUSR1); sigprocmask(SIG_BLOCK, &signal_set, NULL); pthread_create(&tid, NULL, signal_thread, NULL); }
Die behandlung von SIGINT+TERM funktioniert einwandfrei SIGUSR1 dagegen lässt den prozess einfach abstrürzen.
Was muss ich machen, damit das richtig funktioniert?
DANKE für etwaige antworten
-
jetzt funktionierts auf einmal
DANKE fürs lesen
-
keine ursache
-
Jetzt funktionierts wieder nicht. Das einzige was ich geändert habe ist ein aufruf von daemon(0, 1).
DANKE für hinweise