73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
#include <stdio.h> /* entrées sorties */
|
|
#include <unistd.h> /* pimitives de base : fork, ...*/
|
|
#include <stdlib.h> /* exit */
|
|
#include <sys/wait.h> /* wait */
|
|
#include <signal.h> /* 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("DEBUG: 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
|
|
sigaddset(&ens_signaux, SIGINT);
|
|
|
|
// on ajoute SIGUSR1 à ens_signaux
|
|
sigaddset(&ens_signaux, SIGUSR1);
|
|
|
|
// on masque les signaux
|
|
sigprocmask(SIG_SETMASK, &ens_signaux, NULL);
|
|
|
|
// on attend 10 secondes, envoyer SIGINT au clavier
|
|
printf("DEBUG: sleep(10)\n");
|
|
sleep(10);
|
|
|
|
// on s'envoie 2 signaux SIGUSR1
|
|
kill(getpid(), SIGUSR1);
|
|
kill(getpid(), SIGUSR1);
|
|
|
|
// on attend 5 secondes
|
|
printf("DEBUG: 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("DEBUG: 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;
|
|
}
|