SIGACTION(2) Manuel du programmeur Linux SIGACTION(2)
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 comme suit :
struct sigaction {
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
}
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 ges
tion 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 :
Linux 9 Avril 1999 1
SIGACTION(2) Manuel du programmeur Linux SIGACTION(2)
SA_NOCLDSTOP
Si signum vaut SIGCHLD, ne pas recevoir les
signaux de notification d'arrêt d'un proces
sus fils (quand le fils reçoit un signal
SIGSTOP, SIGTSTP, SIGTTIN ou SIGTTOU).
SA_ONESHOT or SA_RESETHAND
Rétablir l'action à son comportement par
défaut une fois que le gestionnaire a été
appelé (C'est le comportement par défaut
avec la fonction signal(2) )
SA_RESTART
Fournir un comportement compatible avec la
sémantique BSD en réinstallant le gestion
naire de signaux après son activation.
SA_NOMASK or SA_NODEFER
Ne pas empêcher un signal d'être reçu depuis
l'intérieur de son propre gestionnaire.
L'option SA_RESTORER est obsolète et ne doit pas être
utilisée.
L'appel sigprocmask est utilisé pour changer la liste des
signaux actuellement bloqués. Son comportement est dépen
dant de la valeur de how, avec les conventions suivantes :
SIG_BLOCK
L'ensemble des signaux bloqués est l'union
de l'ensemble actuel et de l'argument set.
SIG_UNBLOCK
Les signaux dans l'ensemble set sont sup
primés de la liste des signaux bloqués. Il
est possible de débloquer un signal non
bloqué.
SIG_SETMASK
L'ensemble des signaux bloqués est égal à
l'argument set.
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.
Linux 9 Avril 1999 2
SIGACTION(2) Manuel du programmeur Linux SIGACTION(2)
VALEUR RENVOYÉE
sigaction, sigprocmask, sigpending et sigsuspend renvoient
0 s'ils réussissent, ou -1 s'ils échouent, auquel cas
errno contient le code d'erreur.
ERREURS
EINVAL Un signal invalide est indique. Ceci se produit
également si l'on tente de modifier l'action
associée à SIGKILL ou SIGSTOP.
EFAULT act, oldact, set ou oldset pointent en-dehors de
l'espace d'adressage accessible.
EINTR L'appel système a été interrompu.
NOTES
Il est impossible de bloquer SIGKILL or SIGSTOP avec
l'appel sigprocmask. Les tentatives seront ignorées silen
cieusement.
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 posi
tionne l'action de SIGCHK à SIG_IGN.
Les spécifications POSIX définissent seulement SA_NOCLD
STOP. 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.
sigaction peut être appelé avec un second argument null
Linux 9 Avril 1999 3
SIGACTION(2) Manuel du programmeur Linux SIGACTION(2)
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 ensem
bles de signaux.
CONFORMITÉ
POSIX, SVr4. SVr4 ne documente pas la condition d'erreur
EINTR.
VOIR AUSSI
kill(1), kill(2), killpg(2), pause(2), raise(3), siginter
rupt(3), signal(2), signal(7), sigsetops(3), sigvec(2)
TRADUCTION
Christophe Blaess, 1997.
Linux 9 Avril 1999 4