SIGNAL |
Signal |
---|---|
Langage C | signal.h |
Syntaxe
void (*signal(int signal,void (*shandle)(int)))(int); |
Paramètres
Nom | Description |
---|---|
signal | Ce paramètre permet d'indiquer le code de signal |
shandle | Ce paramètre permet d'indiquer l'identificateur de signal |
Description
Cette fonction permet d'effectuer un traitement de signal.
Algorithme
MODULE SIGNAL(signal_number, Ref handler_function) * Vérifier si le gestionnaire est NULL SI handler_function = NULL ALORS Réinitialiser le comportement par défaut pour le signal SINON SI handler_function = SIG_IGN ALORS Ignorer le signal (comportement défini par SIG_IGN) SINON SI handler_function = SIG_DFL ALORS Réinitialiser au comportement par défaut du signal SINON Associer le gestionnaire de signal personnalisé FIN SI Retourner l'ancien gestionnaire de signal (pour que l'on puisse le restaurer plus tard) |
Remarques
- Gestion des Signaux : Les signaux permettent à un programme de réagir à des événements asynchrones, comme une interruption du clavier (par exemple, SIGINT pour Ctrl+C) ou des erreurs système. Lorsqu'un signal est reçu, le programme peut choisir de le gérer avec une fonction spécifique, de l'ignorer, ou de laisser le comportement par défaut se produire (comme l'arrêt du programme).
- Types de Signaux : La fonction signal peut être utilisée pour capturer divers types de signaux. Par exemple :
- Valeur de retour : La fonction signal retourne un ancien gestionnaire de signal (avant que vous n'ayez défini le nouveau gestionnaire), ou SIG_ERR si une erreur se produit. Par exemple, si le signal spécifié n'est pas valide ou si le gestionnaire n'est pas correctement défini, la fonction retournera SIG_ERR. Il est donc recommandé de vérifier cette valeur pour détecter des erreurs potentielles.
- Comportement de désynchronisation : Les signaux sont des mécanismes désynchronisées, ce qui signifie qu'ils peuvent être reçus à n'importe quel moment pendant l'exécution du programme. Lorsqu'un signal est reçu, le gestionnaire de signal défini par signal sera exécuté immédiatement, interrompant le flux d'exécution du programme. Cela peut entraîner des comportements non déterministes si les signaux sont mal gérés.
- Limitations de la fonction signal : Certaines fonctions ne peuvent pas être appelées de manière sûre dans un gestionnaire de signal, en raison des restrictions imposées par l'environnement d'exécution. Par exemple, des fonctions comme malloc ou printf ne sont pas sûres dans un gestionnaire de signal, car elles peuvent elles-mêmes provoquer des signaux ou accéder à des ressources partagées de manière imprévisible. Il est donc recommandé d'utiliser des fonctions sûres dans les gestionnaires de signaux, comme write.
- Réinitialisation Automatique des signaux : Par défaut, certains signaux, tels que SIGSEGV ou SIGFPE, ont un comportement prédéfini terminant le programme. Si vous utilisez signal pour définir un gestionnaire de signal, ce comportement peut être modifié, mais certains systèmes réinitialiseront le gestionnaire après son traitement. Par exemple, après avoir capturé un signal SIGSEGV, le gestionnaire peut réinitialiser le signal à son comportement par défaut.
- Portabilité et comportement dépendant du système : La fonction signal et son comportement peuvent varier d'un système à l'autre. En particulier, le comportement de la fonction sur les systèmes comme Unix (Linux, FreeBSD, macOS,...) peut différer de celui sur les systèmes Windows. En outre, certains systèmes modernes recommandent l'utilisation de la fonction sigaction pour une gestion plus précise et fiable des signaux, car signal peut ne pas offrir des garanties de portabilité sur toutes les plateformes.
Constante | Description |
---|---|
SIGINT | Cette constante permet d'indiquer un signal d'interruption (Ctrl+C). |
SIGSEGV | Cette constante permet d'indiquer une erreur de segmentation (accès à une mémoire non autorisée). |
SIGTERM | Cette constante permet de demander d'arrêt d'un processus. Il existe plusieurs autres signaux liés à des événements spécifiques du système ou du programme. |
Voir également
Langage de programmation - C - Référence de procédures et fonctions - abort
Langage de programmation - C - Référence de procédures et fonctions - exit
Langage de programmation - C - Référence de procédures et fonctions - longjmp
Langage de programmation - C - Référence de procédures et fonctions - raise
Langage de programmation - C - Référence de procédures et fonctions - setjmp
Langage de programmation - C++ - Référence de procédures et fonctions - signal
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 734.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 237.
Dernière mise à jour : Mardi, le 28 juillet 2015