Bonjour,
Je suis sur un programme C++ utilisant différents threads ayant des fonctions fort similaires et j'aimerais essayer de les quitter proprement en interceptant un signal (ou si une autre méthode existe ...)
Ces threads sont composés d'une boucle infinie et le main ne s'occupe que de lancer les threads. Ce qui complique un peu la chose est que les threads font des appels system à tracepath, ping, whois et donc lorsque ctrl-c est pressé, le signal n'est pas intercepter par mon programme mais bien par une des commandes citées plus haut.
Pour le moment, je fais dans chaque thread :
Mon handler est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct sigaction; a.sa_handler = ctrlz_handler; sigaction(SIGTSTP, &a, NULL);
Et donc dans les boucles je fais un pthread_exit(NULL), si ctrlz_pressed est à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void ctrlz_handler(int sig) { if (sig == SIGTSTP) { ctrlz_pressed = 1; puts("Exiting proprely"); } }
Le signal est bien intercepté par le handler mais tout de suite après j'ai un Segmentation fault ce qui fait que les threads ne se terminent pas proprement. Est ce la bonne façon de procéder car je suis bloqué depuis quelques jours sur ce problemes ?
Si vous connaissez un autre moyen, je suis interessé
Voila, merci d'avance
Partager