/** * @ Author: JunkJumper * @ Link: https://github.com/JunkJumper * @ Copyright: Creative Common 4.0 (CC BY 4.0) * @ Create Time: 22-10-2020 11:55:28 * @ Modified by: JunkJumper * @ Modified time: 22-10-2020 11:57:03 */ /**********************************************************/ /* DUT INFORMATIQUE - M311 - R. CHIGNOLI */ /* p_signal : Modification des actions associees */ /* aux signaux SIGINT, SIGSEGV et SIGQUIT. */ /**********************************************************/ #include #include #include #include /* SIGINT 2 Term Interruption depuis le clavier. SIGQUIT 3 Core Demande « Quitter » depuis le clavier. SIGILL 4 Core Instruction illégale. SIGABRT 6 Core Signal d'arrêt depuis abort(3). SIGFPE 8 Core Erreur mathématique virgule flottante. SIGKILL 9 Term Signal « KILL ». SIGSEGV 11 Core Référence mémoire invalide. SIGPIPE 13 Term Écriture dans un tube sans lecteur. SIGALRM 14 Term Temporisation alarm(2) écoulée. SIGTERM 15 Term Signal de fin. SIGUSR1 30,10,16 Term Signal utilisateur 1. SIGUSR2 31,12,17 Term Signal utilisateur 2. SIGCHLD 20,17,18 Ign Fils arrêté ou terminé. SIGCONT 19,18,25 Cont Continuer si arrêté. SIGSTOP 17,19,23 Stop Arrêt du processus. SIGTSTP 18,20,24 Stop Stop invoqué depuis tty. SIGTTIN 21,21,26 Stop Lecture sur tty en arrière-plan. SIGTTOU 22,22,27 Stop Écriture sur tty en arrière-plan. SIG_DFL = action par defaut pour le signal */ int stop = 1; void repSIGQUIT() { printf ("\nJ'ignore le signal SIGQUIT ()\n"); } void repSIGINT() { if(stop == 0) { kill (getpid(), SIGKILL); } else { stop--; printf ("Je m'arrete au 2eme signal d'interruption ()\n"); } } void repSIGSEGV() { printf ("Je m'arrete au premier signal SIGSEGV\n\n"); kill (getpid(), SIGKILL); } int main(){ //printf ("\nJ'ignore le signal SIGQUIT ()\n"); //printf ("Je m'arrete au 2eme signal d'interruption ()\n"); //printf ("Je m'arrete au premier signal SIGSEGV\n\n"); printf("%d\n", getpid()); signal(SIGQUIT, repSIGQUIT); signal(SIGINT, repSIGINT); signal(SIGSEGV, repSIGSEGV); /**********************/ /* PARTIE A COMPLETER */ /**********************/ /* boucle de temporisation */ for (;;); }