#include #include #include #include #include #define max 6 void handler_sigusr1(int sig) { printf("PID %d a reçu un SIGUSR1 : %d\n", getpid(), sig); } void handler_sigusr2(int sig) { printf("PID %d a reçu un SIGUSR2 : %d\n", getpid(), sig); exit(2); } void * fn_thread (void * n) { // Masque tous les signaux sauf SIGUSR1 sigset_t ens_signal; sigfillset(&ens_signal); sigdelset(&ens_signal,SIGUSR1); sigprocmask(SIG_SETMASK, &ens_signal,NULL); while (1){ printf("THREAD up and running.\n"); sleep(1); } pthread_exit(0); } int main () { printf("Entry.\n"); // Configuration des signaux struct sigaction action; struct sigaction action2; action.sa_handler = handler_sigusr1; action2.sa_handler = handler_sigusr2; if (sigaction(SIGUSR1, &action, NULL) || sigaction(SIGUSR2, &action2, NULL)) { printf("Erreur handler (SIGUSR1).\n"); exit(-1); } // Création du thread pthread_t p1; pthread_create (& p1, NULL, fn_thread, NULL); // Masque tous les signaux sauf SIGUSR2 sigset_t ens_signal; sigfillset(&ens_signal); sigdelset(&ens_signal,SIGUSR2); sigprocmask(SIG_SETMASK, &ens_signal,NULL); while (1){ printf("MAIN up and running (pid: %d).\n", getpid()); sleep(1); } return 0; }