Après l'enregistrement pour gérer un signal. Dans la fonction de gestionnaire de signal, est-il nécessaire d'appeler de nouveau le signal() pour se réenregistrer?Traitement du signal sous UNIX
Répondre
Vérifiez this réponse. Ou particulièrement this lien. Fondamentalement, cela dépend du modèle (BSD ou System V) de votre système Unix.
Extrait de la page man de signal.
Dans les systèmes Unix d'origine, lorsqu'un gestionnaire qui a été créé signal à l'aide() a été invoqué par la délivrance d'un signal, la disposition du signal serait remis à zéro à SIG_DFL, et le système n'a pas bloqué la livraison d'autres instances du signal. Le système V fournit également ces sémantiques pour signal(). Cela était mauvais car le signal pouvait être remis à nouveau avant que le gestionnaire ait une chance de se rétablir. De plus, des livraisons rapides du même signal pourraient entraîner des invocations récursives du manipulateur.
BSD amélioré cette situation en changeant la sémantique de gestion du signal (mais, malheureusement, a changé silencieusement la sémantique lors de l'établissement d'un gestionnaire avec un signal()). Sur BSD, lorsqu'un gestionnaire de signal est appelé, la disposition du signal n'est pas réinitialisée, et d'autres instances du signal sont bloquées pendant l'exécution du gestionnaire .
La situation sur Linux est la suivante:
- L'appel système signal() du noyau fournit une sémantique système V.
- Par défaut, dans glibc 2 et plus tard, la fonction enveloppe signal() n'invoque pas l'appel système du noyau. Au lieu de cela, il appelle sigaction (2) en utilisant des drapeaux qui fournissent la sémantique BSD. Ce comportement par défaut est fourni tant que la macro de test de fonctionnalité _BSD_SOURCE est définie. Par défaut, _BSD_SOURCE est défini; il est également implicitement défini si l'on définit _GNU_SOURCE, et peut bien sûr être explicitement défini.
Sur la glibc 2 et les versions ultérieures, si la macro de test de fonctionnalité _BSD_SOURCE n'est pas définie, signal() fournit la sémantique du système V. (La valeur par défaut définition implicite de _BSD_SOURCE est pas fourni, si on invoque gcc (1) dans un de ses modes standard (std = xxx ou -ansi) ou définit diverses autres macros de test de fonctionnalité tels que _POSIX_SOURCE, _XOPEN_SOURCE ou _SVID_SOURCE; voir feature_test_macros (7).)- La fonction signal() sous Linux libc4 et libc5 fournir une sémantique System V. Si un système libc5 inclut à la place de, signal() fournit une sémantique BSD.
- 1. Traitement du signal
- 2. Traitement du signal dans Go
- 3. Traitement du signal en C++
- 4. Traitement du signal Erlang Linux
- 5. Traitement du signal en Python
- 6. Traitement du signal avec plusieurs threads sous Linux
- 7. Redéfinir les défauts de traitement du signal
- 8. Traitement du signal du pilote à l'application
- 9. Que se passe-t-il si pendant un traitement de signal sous UNIX, le même signal est envoyé au programme?
- 10. UNIX Signal perdu
- 11. nodejs traitement du signal de l'enfant
- 12. Traitement du signal en utilisant "TERM"
- 13. Traitement du signal dans les pylônes
- 14. Traitement du signal en utilisant Matlab
- 15. Traitement du signal en Python multi-thread
- 16. Bibliothèque de traitement du signal numérique iOS5?
- 17. Traitement du signal numérique dans Matlab
- 18. Bibliothèque C++ pour le traitement du signal
- 19. Taille du processus sous UNIX
- 20. Utilisation du processeur sous UNIX
- 21. Traitement du signal dans Matlab (Automatic Music Genre Classification)
- 22. Traitement du signal pour fichier audio en python
- 23. Meilleur projet open source pour le traitement du signal audio?
- 24. Comment gérer le signal SIGABRT dans unix
- 25. Traitement du signal: Le signal de fenêtrage améliore le rejet de la bande d'arrêt, pourquoi?
- 26. aide: code de comportement incorrect: traitement du signal IPC client-serveur sur POSIX Message Queue Programmation UNIX C
- 27. Installation du module Perl sous Unix
- 28. Code optimisé sous Unix?
- 29. Traitement du langage naturel sous Windows 8
- 30. Traitement du gaspillage de sous-réseau
Et la question est? : | – Albireo
est-il nécessaire d'appeler à nouveau signal() pour ré-enregistrer? – shreyasva