82 lines
2.5 KiB
C
82 lines
2.5 KiB
C
/**
|
|
* @ 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 <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
|
|
/*
|
|
|
|
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 (<Ctrl \\>)\n");
|
|
}
|
|
|
|
void repSIGINT() {
|
|
if(stop == 0) {
|
|
kill (getpid(), SIGKILL);
|
|
} else {
|
|
stop--;
|
|
printf ("Je m'arrete au 2eme signal d'interruption (<Ctrl C>)\n");
|
|
}
|
|
}
|
|
|
|
void repSIGSEGV() {
|
|
printf ("Je m'arrete au premier signal SIGSEGV\n\n");
|
|
kill (getpid(), SIGKILL);
|
|
}
|
|
|
|
int main(){
|
|
//printf ("\nJ'ignore le signal SIGQUIT (<Ctrl \\>)\n");
|
|
//printf ("Je m'arrete au 2eme signal d'interruption (<Ctrl C>)\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 (;;);
|
|
}
|