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 systeme sigaction sert a modifier l'action effectuee par un processus a la reception d'un signal specifique.

signum indique le signal concerne, a l'exception de SIGKILL et SIGSTOP.

Si act est non nul, la nouvelle action pour le signal signum est definie par act. Si oldact est non nul, l'ancienne action est sauvegardee dans oldact.

La structure sigaction est definie comme suit :

    struct sigaction {
        void (*sa_handler)(int);
        sigset_t sa_mask;
        int sa_flags;
        void (*sa_restorer)(void);
    }

sa_handler indique l'action affectee au signal signum et peut etre SIG_DFL pour l'action par defaut, SIG_IGN pour ignorer le signal, ou un pointeur sur une fonction de gestion de signaux.

sa_mask fournit un masque de signaux a bloquer pendant l'execution du gestionnaire. De plus le signal ayant appele le gestionnaire est bloque a moins que les attributs SA_NODEFER ou SA_NOMASK soient precises.

sa_flags specifie un ensemble d'attributs qui modifient le comportement du gestionnaire de signaux. Il est forme par un OU binaire ( | ) entre les options suivantes :

    SA_NOCLDSTOP
        Si signum vaut SIGCHLD, ne pas recevoir les signaux de notification d'arret d'un processus fils (quand le fils recoit un signal SIGSTOP, SIGTSTP, SIGTTIN ou SIGTTOU).

    SA_ONESHOT or SA_RESETHAND
        Restaurer l'action a son comportement par defaut une fois que le gestionnaire a ete appele (C'est le comportement par defaut avec la fonction signal(2) )

    SA_RESTART
        Fournir un comportement compatible avec la semantique BSD en reinstallant le gestionnaire de signaux apres son activation.

    SA_NOMASK or SA_NODEFER
        Ne pas empecher un signal d'etre recu depuis l'interieur de son propre gestionnaire.

L'option sa_restorer est obsolete et ne doit pas etre utilisee.

L'appel sigprocmask est utilise pour changer la liste des signaux actuellement bloques. Son comportement est dependant de la valeur de how, avec les conventions suivantes :

    SIG_BLOCK
        L'ensemble des signaux bloques est l'union de l'ensemble actuel et de l'argument set.

    SIG_UNBLOCK
        Les signaux dans l'ensemble set sont supprimes de la liste des signaux bloques. Il est possible de debloquer un signal non bloque.

    SIG_SETMASK
        L'ensemble des signaux bloques est egal a l'argument set.

Si oldset est non nul, la valeur precedente du masque de signaux est stockee dans oldset.

L'appel sigpending permet l'examen des signaux en attente (qui se sont declenches en etant bloques). Le masque de signaux en attente est stocke dans set.

L'appel sigsuspend remplace temporairement le masque de signaux bloques par celui fourni dans mask puis endort le processus jusqu'a arrivee d'un signal.

VALEUR RENVOYEE
sigaction, sigprocmask, sigpending et sigsuspend renvoient 0 s'ils reussissent, ou -1 s'ils echouent, auquel cas errno contient le code d'erreur.

ERREURS

EINVAL
    Un signal invalide est indique. Ceci se produit egalement si l'on tente de modifier l'action associee a SIGKILL ou SIGSTOP.

EFAULT
    act, oldact, set ou oldset pointent en-dehors de l'espace d'adressage accessible.

EINTR
    L'appel systeme a ete interrompu

NOTES
Il est impossible de bloquer SIGKILL or SIGSTOP avec l'appel sigprocmask. Les tentatives seront ignorees silencieusement.

Suivant POSIX, le comportement d'un processus est indefini apres qu'il ait ignore un signal SIGFPE, SIGILL, ou SIGSEGV qui n'avait pas ete engendre par une fonction kill() ou raise(). La division entiere par zero a un resultat indefini. Sur certaines architectures, cela declenchera un signal SIGFPE. Ignorer ce signal peut mener a des boucles sans fin.

Placer SIGCHLD a SIG_IGN conduit a une terminaison immediate des processus fils qui meurent (ils ne restent pas a l'etat zombie).

les specifications POSIX definissent 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 meme nom.

L'option SA_NODEFER est compatible avec l'option SVr4 du meme nom pour les noyaux 1.3.9 et ulterieurs. Pour les noyaux plus anciens, Linux autorisera la reception de tous les signaux et pas seulement celui qui vient de se declencher (ecrasant effectivement sa_mask ).

Les noms SA_RESETHAND et SA_NODEFER pour compatibilite avec SVr4 ne sont presents que dans les bibliotheques 3.0.9 et suivantes.

sigaction peut etre appele avec un second argument null pour obtenir le gestionnaire de signaux actuel. On peut aussi verifier si un signal est valide sur la machine actuelle en l'appellant avec les deuxieme et troisieme arguments nuls.

Voir sigsetops(3) pour les details concernant les ensembles de signaux.

CONFORMITE
POSIX, SVr4. SVr4 ne documente pas la condition d'erreur EINTR.

VOIR AUSSI
kill(1), kill(2), killpg(2), pause(2), raise(3), siginterrupt(3), signal(2), signal(7), sigsetops(3), sigvec(2)