Bonjour,
Je souhaite executer un processus tournant en continu (boucle quasi infinie) jusqu'à ce que le signal SIGINT soit recu par mon processus. Cependant, Lorsque SIGINT est capturé par mon process, je souhaite uniquement modifier une variable permettant de quitter ma boucle infinie et revenir à ma fonction main. Pour l'instant, tous mes essais ont été infructueux, je ne retourne pas dans ma fonction main.
J'illustre ma description ci-dessous:
Lorsque je tape CTRL-C dans ma console, je veux pouvoir revenir dans mon main et quitter normalement ma fonction. Pour l'instant fonction2 n'est jamais executée, je ne sais même pas ou part le programme une fois que FermeturePrecipitee est terminée. Tout ce que je sais c'est que je n'ai pas la main sur mon shell et que je suis obligé de tuer mon appli par la fonction KILL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 int IsRunning; void SortiePrecipitee (int signal){ if (signal == SIGINT){ IsRunning = 0; } } int main() { /* configuration de la fonction en cas de ctrl -C */ (void *)signal(SIGINT, SortiePrecipitee); IsRunning = 1; while(IsRunning == 1){ fonction1(); } fonction2(); return 0; }
Je sais que j'aurai la possibilité d'éxécuter fonction2 dans mon handler FermeturePrecipitee, mais je ne souhaite pas le faire ainsi.
L'objectif final est de transformer le signal d'interruption par un nouveau signal que j'aurai défini moi même, lequel sera généré par un autre process.
Quelqu'un aurait une idée sur le déroulement des différents appels et comment faire pour modifier ma variable IsRunning dans mon handler puis revenir à mion main ?
Merci de votre aide
Nicolae






Répondre avec citation




Partager