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


Anmelden zum Antworten