Du progrès ... mais pas encore ça !
Merci pour vos réponses.
Je n'ai pas touché au flag ISIG car j'ai lu comme tu l'as dit que par défaut il est activé. J'ai essayé d'attraper d'autres signaux, SIGINT (Ctrl + C) fonctionne mais SIGTSTP ( Ctrl + Z ) ne réagit pas.
Citation:
En outre, il faut que ton programme appelle effectivement au moins une fois la fonction my_manage_signal() au début de son exécution pour que ton gestionnaire soit bien mis en place. Lance ton programme, ouvre un second terminal, trouve le PID de ton programme avec la commande ps, et envoie ton signal à la main avec « kill -SIGTSTP <pid> ». Ça te permettra de savoir si le gestionnaire fonctionne bien, indépendamment de l'état de la console.
La fonction my_manage_signal() est bien appelée juste avant l'initialisation de mon terminal ( passage en mode non canonique ).
J'ai essayé depuis un autre terminal d'envoyer le signal est il est bien capté dans ce cas :
Code:
1 2 3 4 5 6
|
void my_manage_signal()
{
[...] //Des signaux
signal(SIGTSTP, SIG_DFL);
} |
Cependant, je dois exécuter un handler pour remettre le terminal dans son mode " canonique " par défaut :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
void my_sigtstp()
{
printf("La fonction est charge...");
my_restore_term(&env); //env contient une structure termios avec les paramètres par défaut.
}
void my_manage_signal()
{
[...] //Des signaux
signal(SIGTSTP, my_sigtstp);
} |
Dans le deuxième cas (celui qui m'interesse), ma fonction est bien exécutée mais le programme ne se « coupe pas » . J'ai donc essayé d'ajouter signal(SIGTSTP, SIG_DFL); dans my_sigtstp cependant cela ne fonctionne qu'au 2ème signal envoyé ... ( logique..). J'ai pas le droit à la fonction kill, sinon j'aurai envoyé moi même le signal ensuite, je vais voir du coté de ioctl() qui est autorisé.
Concernant le fait que CTRL + C fonctionne mais pas CTRL + Z, il n'y a donc pas de raison que mon flag ISIG soit en cause... je ne sas pas de quel coté chercher.