signal |
Signal |
---|---|
Python |
Description
Liste des procédures et fonctions
Nom | Description |
---|---|
alarm | Cette fonction permet de demander qu'un signal SIGALRM soit envoyé au processus en quelques secondes si le temps spécifié n'est pas nul. |
getitimer | Cette fonction permet de demander la valeur actuelle d'une minuterie d'intervalle spécifié. |
getsignal | Cette fonction permet de demander le gestionnaire de signal actuel pour le signal spécifié. La valeur renvoyée peut être un objet Python appelable, ou l'une des valeurs spéciales signal.SIG_IGN, signal.SIG_DFL ou None. |
pause | Cette fonction permet de faire dormir le processus jusqu'à ce qu'un signal soit reçu; le gestionnaire approprié sera alors appelé. |
setitimer | Cette fonction permet de fixer une minuterie d'intervalle spécifié (un parmi signal.ITIMER_REAL, signal.ITIMER_VIRTUAL ou signal.ITIMER_PROF) par lequel tirer après les secondes (le flottant est accepté, différent de la fonction alarm()) et ensuite toutes les secondes d'intervalle. |
set_wakeup_fd | Cette fonction permet de fixer le réveil de l'identificateur de descripteur spécifié. Lorsqu'un signal est reçu, un octet '\0' est écrit dans l'identificateur de descripteur spécifié. Cette situation peut être utilisé par une bibliothèque pour réveiller un bassin ou sélectionner un appel, permettant au signal d'être entièrement traité. |
siginterrupt | Cette fonction permet de modifier le comportement de redémarrage des appels système : si le drapeau est False, les appels système seront redémarrés lorsqu'ils seront interrompus par le signal spécifié, sinon les appels système seront interrompus. |
signal | Cette fonction permet de fixer le gestionnaire de signal spécifié sur le gestionnaire de fonctions. |
Remarques
- Un gestionnaire pour un signal particulier, une fois défini, reste installé jusqu'à ce qu'il soit explicitement réinitialisé (le langage de programmation Python émule l'interface de style BSD quelle que soit la mise en oeuvre sous-jacente), à l'exception du gestionnaire pour SIGCHLD, suivant la mise en oeuvre sous-jacente.
- Il n'y a aucun moyen de «bloquer» temporairement les signaux des sections critiques (car cela n'est pas pris en charge par toutes les versions Unix).
- Bien que les gestionnaires de signaux Python soient appelés de manière désynchronisé en ce qui concerne l'utilisateur Python, ils ne peuvent se produire qu'entre les instructions «atomiques» de l'interpréteur Python. Cette situation signifie que les signaux arrivant lors de longs calculs mise en oeuvre uniquement en C (comme les correspondances d'expressions régulières sur de grands corps de texte) peuvent être retardés pendant une durée arbitraire.
- Lorsqu'un signal arrive pendant une opération d'entrée/sortie, il est possible que l'opération d'entrée/sortie lève une exception après le retour du gestionnaire de signal. Cette situation dépend de la sémantique du système d'exploitation Unix sous-jacent concernant les appels système interrompus.
- Étant donné que le gestionnaire de signal C revient toujours, il n'a pas de chance de détection des erreurs synchrones comme SIGFPE ou SIGSEGV.
- Le langage de programmation Python installe un petit nombre de gestionnaires de signaux par défaut : SIGPIPE est ignoré (les erreurs d'écriture sur les canaux et les sockets peuvent donc être signalées comme des exceptions Python ordinaires) et SIGINT est traduit en une exception KeyboardInterrupt. Tous ces éléments peuvent être remplacés.
- Il faut être prudent si les signaux et les processus léger sont utilisés dans le même programme. La chose fondamentale à retenir lors de l'utilisation simultanée de signaux et de processus léger est : toujours effectuer des opérations signal() dans le processus léger principal d'exécution. Tout le processus léger peut exécuter dans une fonction alarm(), getsignal(), pause(), setitimer() ou getitimer(); seul le processus léger principal peut définir un nouveau gestionnaire de signal, et le processus léger principal sera le seul à recevoir des signaux (cette situation est imposé par le module de signal Python, même si la mise en oeuvre du processus léger sous-jacent prend en charge l'envoi de signaux à des processus légers individuels). Cette situation signifie que les signaux ne peuvent pas être utilisés comme moyen de communication entre les processus légers. Utilisez plutôt des verrous.
Dernière mise à jour : Vendredi, le 3 janvier 2020