De mon côté, une fois que j'ai ajouté les #include qui manquent, soit :
#include<signal.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#define SIGSEGV 11voidfToCallIfSegFault(intsig){fprintf(stdout,"il y a eu un segfault dans ton code mon coco, le sig = %i\n",sig);kill(getpid(),sig);}intmain(intargc,charconst*argv[]){structsigactionact;act.sa_handler=fToCallIfSegFault;sigaction(SIGSEGV,&act,NULL);//on genere un segfaultchar*str=NULL;str[0]='c';//erreur de segmentationreturn0;}
J'ai bien ceci en boucle :
il y a eu un segfault dans ton code mon coco, le sig = 11
il y a eu un segfault dans ton code mon coco, le sig = 11
il y a eu un segfault dans ton code mon coco, le sig = 11
... ou bien un arrêt instantané, ou bien un arrêt après plus ou moins longtemps.
Dans mes vieux souvenirs (mais je n'ai pas de source pour cela), il me semble qu'on disait qu'un gestionnaire de signal, sur SIGSEGV du moins, était censé faire une chose et une seule : appeler backtrace, finir de loguer et quitter.
Quoi qu'il en soit, je t'invite à lire (en anglais) cette section de la page wikipedia sur les signaux, notamment la première phrase :
# Étrange, mais un (équivalent de) raise() depuis un gestionnaire de signaux...
Posté par Cyril Brulebois (site web personnel) . En réponse au message probleme avec sigaction. Évalué à 2.
De mon côté, une fois que j'ai ajouté les
#includequi manquent, soit :J'ai bien ceci en boucle :
... ou bien un arrêt instantané, ou bien un arrêt après plus ou moins longtemps.
Dans mes vieux souvenirs (mais je n'ai pas de source pour cela), il me semble qu'on disait qu'un gestionnaire de signal, sur
SIGSEGVdu moins, était censé faire une chose et une seule : appelerbacktrace, finir de loguer et quitter.Quoi qu'il en soit, je t'invite à lire (en anglais) cette section de la page wikipedia sur les signaux, notamment la première phrase :
Debian Consultant @ DEBAMAX