SIGACTION
Section: Manuel du programmeur Linux (2) NOM SYNOPSIS DESCRIPTION VALEUR RENVOYÉE ERREURS NOTES CONFORMITÉ NON DOCUMENTÉ VOIR AUSSI TRADUCTION NOM
sigaction, sigprocmask, sigpending, sigsuspend - Fonctions POSIX de manipulations de signaux.
SYNOPSIS
#include <signal.h>
int sigaction (int signum, const struct sigaction * act, struct sigaction *oldact); int sigprocmask (int how, const sigset_t * set, sigset_t * oldset); int sigpending (sigset_t * set); int sigsuspend (const sigset_t * mask); DESCRIPTION
L'appel système
sigaction
sert à modifier l'action effectuée par un processus à la réception
d'un signal spécifique.
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 :
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. 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 les attributs SA_NODEFER ou SA_NOMASK soient précisés. 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 :
si_code indique la raison pour laquelle le signal a été émis. Il s'agit d'une valeur, pas d'un masque de bits. Les valeurs possibles pour tous les signaux sont :
L'appel sigprocmask est utilisé pour changer la liste des signaux actuellement bloqués. Son comportement est dépendant de la valeur de how, avec les conventions suivantes :
Si oldset est non nul, la valeur précédente du masque de signaux est stockée dans oldset. L'appel sigpending permet l'examen des signaux en attente (qui se sont déclenchés en étant bloqués). Le masque de signaux en attente est stocké dans set. L'appel sigsuspend remplace temporairement le masque de signaux bloqués par celui fourni dans mask puis endort le processus jusqu'à arrivée d'un signal. VALEUR RENVOYÉE
sigaction,
sigprocmask,
et
sigpending
renvoient 0 s'ils réussissent, ou -1 s'ils échouent, auquel
cas
errno
contient le code d'erreur.
La fonction
sigsuspend
renvoit toujours -1, avec en principe l'erreur
EINTR.
ERREURS
NOTES
Il est impossible de bloquer
SIGKILL or SIGSTOP
avec l'appel sigprocmask. Les tentatives seront ignorées silencieusement.
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() ou raise(). 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 (B.3.3.1.3) désapprouve le positionnement de SIGCHLD à SIG_IGN. Les comportements BSD et SYSV diffèrent, faisant échouer sous Linux les logiciels BSD qui positionne l'action de SIGCHLD à SIG_IGN. Les spécifications POSIX définissent seulement SA_NOCLDSTOP. L'utilisation des autres options de sa_flags n'est pas portable. 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 ). Les noms SA_RESETHAND et SA_NODEFER pour compatibilité avec SVr4 ne sont présents que dans les bibliothèques 3.0.9 et suivantes. L'attribut SA_SIGINFO est précisé par POSIX.1b. Son support fut ajouté dans Linux 2.2. sigaction peut être appelé avec un second argument null pour obtenir le gestionnaire de signaux actuel. On peut aussi vérifier si un signal est valide sur la machine actuelle en l'appellant avec les deuxième et troisième arguments nuls. Voir sigsetops(3) pour les détails concernant les ensembles de signaux. CONFORMITÉ
POSIX, SVr4. SVr4 ne documente pas la condition d'erreur EINTR.
NON DOCUMENTÉ
Avant l'introduction de l'attribut
SA_SIGINFO
il était déjà possible d'obtenir des informations supplémentaires dans le
gestionnaire de signal, en lui ajoutant un argument de type
struct sigcontext.
On peut retrouver ceci dans les sources du noyau. Ce mécanisme est désormais obsolète.
VOIR AUSSI
kill(1),
kill(2),
killpg(2),
pause(2),
sigaltstack(2),
raise(3),
siginterrupt(3),
signal(2),
signal(7),
sigsetops(3),
sigvec(2)
TRADUCTION
Christophe Blaess, 1996-2003.
|