J'écris un programme multithread où je veux gérer une commande Ctrl-C de l'utilisateur pour terminer l'exécution. Autant que je sache, il n'y a aucune garantie que le fil principal, qui est capable d'annuler chaque fil de travail, attrape le signal. Est-il nécessaire, par conséquent, d'avoir un gestionnaire de signal différent du code du thread de travail afin que quiconque attrape le signal s'il arrive, ou y a-t-il une autre façon de le faire avec un gestionnaire de signal?attraper SIGINT dans un programme multithread
7
A
Répondre
8
Vous pouvez bloquer les signaux du thread appelant avec pthread_sigmask(). Et, comme les signaux bloqués sont hérités des threads nouvellement créés, vous pouvez bloquer SIGINT dans le thread principal, puis lancer vos autres threads, puis le débloquer dans le thread principal, si cela est préférable.
Questions connexes
- 1. Attraper/bloquer SIGINT lors de l'appel système
- 2. Comment puis-je attraper SIGINT dans le programme de threading python?
- 3. requête sur un programme multithread
- 4. Exécuter un autre programme dans un programme multithread
- 5. core dump dans un programme multithread
- 6. java.util.ConcurrentModificationException dans Non multithread Programme
- 7. Bug dans le programme multithread
- 8. Débogage d'un programme multithread
- 9. Strace multithread Programme
- 10. Ignorer SIGINT dans Java
- 11. Comment faire terminal ne pas imprimer "^ Tué par le signal 2." sur attraper un SIGINT
- 12. Problèmes de programme récursifs/multithread
- 13. Programme multithread - considérations de conception
- 14. manutention SIGINT et getline
- 15. Enregistrement du travail après un SIGINT
- 16. Assurer la destruction du processus dans bash? (Peut-être attraper SIGINT)
- 17. Programme OpenGL SDL/C++, comment empêcher le SDL d'intercepter SIGINT?
- 18. Comment attraper SIGUSR1 dans luajit sous Linux?
- 19. Catch SIGINT dans bash, handle AND ignore
- 20. Envoyer un SIGINT à un processus daemon
- 21. Programme C multithread utilisant plusieurs fichiers .cpp
- 22. Programme de serveur multithread en Java
- 23. Cliché de base d'un programme multithread
- 24. temps nécessaire pour terminer le programme multithread?
- 25. Multithread C Programme sur le Raspberry PI
- 26. Problème étrange avec un programme multithread simple en Java
- 27. Comment écrire correctement un programme de test multithread
- 28. Test/Amélioration des performances du programme multithread
- 29. En utilisant SIGINT
- 30. Comment activer le débogage inverse sur un programme multithread?
mais de cette façon ne va pas un signal sigint à être perdu si un fils-fils arrive à l'attraper et l'ignore tout simplement? – nikos
@nikos: Oui, mais je ne vois pas la relation avec ce que j'écrivais; Si un thread bloque un signal, il ne peut pas, par définition, l'attraper. – janneb
@nikos: Un signal n'est jamais envoyé à un thread qui l'a bloqué (par exemple en utilisant 'pthread_sigmask()') - ceci est différent du thread qui l'attrape et l'ignore. Si tous les threads du thread principal ont 'SIGINT' bloqué, alors il sera toujours remis au thread principal. – caf