#include #include #include #include int compteur; void traite_SIGINT() { sigset_t signaux; compteur++; if(compteur == 1) { printf("pour quitter, entrez à nouveau Ctrl+C dans moins de trois secondes\n"); alarm(3); sigemptyset(&signaux); sigsuspend(&signaux); } if(compteur == 2) { exit(0); } } void nop() { /* nop */ } void traite_SIGALRM() { compteur = 0; } main() { int pid; struct sigaction action; compteur = 0; while(1) { { action.sa_handler = nop; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGALRM,&action,NULL); action.sa_handler = nop; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGINT,&action,NULL); pid = fork(); if(pid == 0) { execlp("date","date",NULL); } action.sa_handler = traite_SIGALRM; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGALRM,&action,NULL); action.sa_handler = traite_SIGINT; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGINT,&action,NULL); wait(NULL); } } }