TP-systeme-exploitation-cen.../TP2/etu.c
2023-06-20 20:57:09 +02:00

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("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;
}