J'ai attrape un signal en utilisant un Signal Handler (Posix), le signale est une segmentation fault (au passage).
J'aimerai savoir ce qu'il m'est possible de faire apres avoir attrape ce signal.
Mon programme C++ est utilise dans un container (tomcat),y a des bugs dans le programme et des qu'une segmentation fault est genere, ca fait planter tout le container.
J'aimerai savoir si on peut faire terminer le programme correctement en modifiant le signal recu.
J'ai trouve un genre d'exemple d'utilisation de signal, mais j'arrive pas trop a comprendre ce qu'il se passe.
Je crois que ce qui m'interesse se passe entre la ligne 15 et 19, mais j'arrive pas a comprendre exactement ce qu'il se passe.
()
1 /* sig-posix.c */
2 #include <stdlib.h>
3 #include <signal.h>
4 #include <errno.h>
5 #include <unistd.h>
6 #include <stdio.h>
7 void traitement(int signum)
8 {
9 struct sigaction rien, ancien;
10
11 printf("Signal %d => ",signum);
12 switch(signum) {
13 case SIGTSTP :
14 printf("J'ai reçu un SIGTSTP.\n" );
15 /* on désarme le signal SIGTSTP */
16 rien.sa_handler = SIG_DFL;
17 rien.sa_flags = 0;
18 sigemptyset(&rien.sa_mask); /* rien à masquer */
19 sigaction(SIGTSTP,&rien,&ancien);
20
21 printf("Alors je m'endors....\n" );
22 kill(getpid(),SIGTSTP); /* auto-endormissement */
23 printf("On me réveille ?\n" );
24 /* remise en route */
25 sigaction(SIGTSTP,&ancien,NULL);
26 printf("C'est reparti !\n" );
27 break;
28 case SIGINT :
29 case SIGTERM :
30 printf("On m'a demandé d'arrêter le programme.\n" );
31 exit(EXIT_SUCCESS);
32 break;
33 };
34 }
35 int main(void)
36 {
37 struct sigaction a;
38 int i;
39
40 a.sa_handler = traitement; /* fonction à lancer */
41 sigemptyset(&a.sa_mask); /* rien à masquer */
42
43 sigaction(SIGTSTP,&a,NULL); /* pause contrôle-Z */
44 sigaction(SIGINT, &a,NULL); /* fin contrôle-C */
45 sigaction(SIGTERM,&a,NULL); /* arrêt */
46
47 for (i=1; i<60; i++) {
48 sleep(1);
49 printf("%d",i%10);
50 fflush(stdout);
51 };
52 printf("Fin\n" );
53 exit(EXIT_SUCCESS);
54 }
---------------
La meilleure facon d'en apprendre toujours plus, c'est de ne pas retenir ce qu'on nous dit.