sigaction | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#include <signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
signum indique le signal concerné, à l'exception de SIGKILL et SIGSTOP.
Si act est non nul, la nouvelle action pour le signal signum est définie par act. Si oldact est non nul, l'ancienne action est sauvegardée dans oldact.
La structure sigaction est définie par quelque chose comme :
struct sigaction { void (*sa_handler) (int); void (*sa_sigaction) (int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer) (void); };
Sur certaines architectures, on emploie une union. Il ne faut donc pas utiliser ou remplir simultanément sa_handler et sa_sigaction.
L'élément sa_restorer est obsolète et ne doit pas être utilisé, POSIX ne mentionne pas de membre sa_restorer.
sa_handler indique l'action affectée au signal signum, et peut être SIG_DFL pour l'action par défaut, SIG_IGN pour ignorer le signal, ou un pointeur sur une fonction de gestion de signaux. Cette fonction reçoit le numéro de signal comme seul argument.
Si SA_SIGINFO est spécifié dans sa_flags, sa_sigaction (au lieu de sa_handler) spécifie la fonction gestionnaire de signaux pour signum. Cette fonction prend le numéro comme premier argument, un pointeur sur une siginfo_t comme second argument et un pointeur sur une ucontext_t (transtypée en void *) comme troisième argument.
sa_mask fournit un masque de signaux à bloquer pendant l'exécution du gestionnaire. De plus, le signal ayant appelé le gestionnaire est bloqué à moins que l'attribut SA_NODEFER ne soit précisé.
sa_flags spécifie un ensemble d'attributs qui modifient le comportement du gestionnaire de signaux. Il est formé par un OU binaire « | ») entre les options suivantes :
Le paramètre siginfo_t de la routine sa_sigaction est une structure contenant les éléments suivants :
siginfo_t { int si_signo; /* Numéro de signal */ int si_errno; /* Numéro d'erreur */ int si_code; /* Code du signal */ pid_t si_pid; /* PID de l'émetteur */ uid_t si_uid; /* UID réel de l'émetteur */ int si_status; /* Valeur de sortie */ clock_t si_utime; /* Temps utilisateur écoulé */ clock_t si_stime; /* Temps système écoulé */ sigval_t si_value; /* Valeur de signal */ int si_int; /* Signal POSIX.1b */ void * si_ptr; /* Signal POSIX.1b */ void * si_addr; /* Emplacement d'erreur */ int si_band; /* Band event */ int si_fd; /* Descripteur de fichier */ }Les champs si_signo, si_errno and si_code sont définis pour tous les signaux. (si_errno n'est pas utilisé sous Linux.) Le reste de la structure peut être une union, et il ne faut donc tenir compte que des champs qui sont significatifs pour le signal reçu :
si_code est une valeur (pas d'un masque de bits) indiquant la raison pour laquelle le signal a été émis. La liste suivante donne les valeurs qui peut être placées dans si_code pour n'importe quel signal, avec la raison pour laquelle le signal a été généré.
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGCHLD :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGFPE :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGSEGV :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGBUS :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGTRAP :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGILL :
Les valeurs suivantes peuvent être placées dans si_code pour un signal SIGPOLL :
VALEUR RENVOYÉE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
ERREURS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
CONFORMITÉ | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Suivant POSIX, le comportement d'un processus est indéfini après qu'il
ait ignoré un signal
SIGFPE,
SIGILL
ou
SIGSEGV
qui n'avait pas été
engendré par une fonction
kill(2)
ou
raise(3).
La division entière par zéro a un résultat indéfini.
Sur certaines architectures, cela déclenchera un signal
SIGFPE.
(De même, diviser l'entier le plus négatif par -1 peut déclencher
SIGFPE).
Ignorer ce signal peut mener à des boucles sans fin.
POSIX.1-1990 désapprouve le positionnement de SIGCHLD à SIG_IGN. POSIX.1-2001 le permet, ignorant que SIGCHLD peut être utilisé pour éviter la création de zombies (voir wait(2)). Cependant, les comportements historiques de BSD et System V sur l'ignorance de SIGCHLD diffèrent, aussi, la seule méthode entièrement portable pour s'assurer que les fils qui se terminent ne deviennent pas des zombies est d'intercepter le signal SIGCHLD et d'appeler wait(2) ou de faire quelque chose de similaire.
POSIX.1-1990 définit seulement SA_NOCLDSTOP. POSIX.1-2001 a ajouté SA_NOCLDWAIT, SA_RESETHAND, SA_NODEFER et SA_SIGINFO. L'utilisation des autres options de sa_flags peut être moins portable dans les applications conçues pour de vieilles implémentations Unix.
La prise en charge de SA_SIGINFO a été ajoutée dans Linux 2.2.
L'option SA_RESETHAND est compatible avec l'option SVr4 du même nom.
L'option SA_NODEFER est compatible avec l'option SVr4 du même nom pour les noyaux 1.3.9 et ultérieurs. Pour les noyaux plus anciens, Linux autorisera la réception de tous les signaux et pas seulement celui qui vient de se déclencher (écrasant effectivement sa_mask ).
sigaction() peut être appelé avec un second argument nul pour obtenir le gestionnaire de signaux actuel. On peut aussi vérifier si un signal est valide sur la machine actuelle en l'appelant avec les deuxième et troisième arguments nuls.
Il n'est pas possible de bloquer SIGKILL ou SIGSTOP (en les spécifiant dans sa_mask). Les tentatives pour le faire sont silencieusement ignorées.
Voir sigsetops(3) pour les détails concernant les ensembles de signaux.
Voir signal(7) pour une liste des fonctions sûres pour les signaux asynchrones qui peuvent être appelées par un gestionnaire de signaux.
Non documenté | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
EXEMPLE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 14 octobre 1996 et révisée le 23 avril 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 sigaction ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |