#include /* entrées sorties */ #include /* pimitives de base : fork, ...*/ #include /* exit */ #include /* wait */ #include /* opérations sur les signaux */ /* Traitement du signal */ void handler_sig(int signal_num) { printf("Reception %d\n", signal_num); return; } // TODO: utiliser sigaction int main() { // on affiche le pid printf("pid=%d\n", getpid()); /* associer un traitant au signal USR1 */ signal(SIGUSR1, handler_sig); /* associer un traitant au signal USR2 */ signal(SIGUSR2, handler_sig); sigset_t ens_signaux; // on vide les set de signaux sigemptyset(&ens_signaux); // on ajoute SIGINT à ens_signaux_int sigaddset(&ens_signaux, SIGINT); // on ajoute SIGUSR1 à ens_signaux_usr1 sigaddset(&ens_signaux, SIGUSR1); // on masque les signaux sigprocmask(SIG_SETMASK, &ens_signaux, NULL); // on attend 10 secondes, envoyer SIGINT au clavier printf("sleep(10)\n"); sleep(10); // on s'envoie 2 signaux SIGUSR1 kill(getpid(), SIGUSR1); kill(getpid(), SIGUSR1); // on attend 5 secondes printf("sleep(5)\n"); sleep(5); // on s'envoie 2 signaux SIGUSR2 kill(getpid(), SIGUSR2); kill(getpid(), SIGUSR2); // on démasque SIGUSR1 sigdelset(&ens_signaux, SIGUSR1); sigprocmask(SIG_SETMASK, &ens_signaux, NULL); // on attend 10 secondes printf("sleep(10)\n"); sleep(10); // on démasque SIGINT sigdelset(&ens_signaux, SIGINT); sigprocmask(SIG_SETMASK, &ens_signaux, NULL); // message de terminaison printf("Salut\n"); return EXIT_SUCCESS; }