cours_prog_systeme/TD/TD5/sig.c
2021-08-22 13:28:10 +02:00

66 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <signal.h>
#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;
}