Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       sigaction - Examiner et modifier l'action associee a un signal

SYNOPSIS

       #include <signal.h>

       int sigaction(int signum, const struct sigaction *act,
                     struct sigaction *oldact);

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       sigaction() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

DESCRIPTION

       L'appel systeme sigaction() sert a modifier l'action effectuee  par  un
       processus  a  la reception d'un signal specifique. (Consultez signal(7)
       pour une vue d'ensemble sur les signaux)

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

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

       La structure sigaction est definie 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 simultanement sa_handler et sa_sigaction.

       L'element  sa_restorer  est  obsolete  et  ne devrait pas etre utilise,
       POSIX ne mentionne pas de membre sa_restorer.

       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.

       Si SA_SIGINFO est indique dans sa_flags, alors sa_sigaction (plutot que
       sa_handler)  pointe  vers  le gestionnaire de signal pour signum. Cette
       fonction prend le numero du signal comme premier argument, un  pointeur
       vers  un  siginfo_t  comme  second  argument,  et  un  pointeur vers un
       ucontext_t (transtype en void *) comme troisieme parametre.

       sa_mask specifie un masque de signaux a bloquer  (c'est-a-dire  ajoutes
       au  masque de signaux du thread dans lequel le gestionnaire est appele)
       pendant l'execution du gestionnaire. De plus le signal ayant appele  le
       gestionnaire est bloque a moins que l'attribut SA_NODEFER soit precise.

       sa_flags specifie un ensemble d'attributs qui modifient le comportement
       du signal. 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  (quand  le  fils  recoit  un   signal
                  SIGSTOP,  SIGTSTP,  SIGTTIN ou SIGTTOU) ou de relance (quand
                  il recoit SIGCONT) des processus  fils.  Consultez  wait(2).
                  Cet  attribut  n'a de sens que lors de la mise en place d'un
                  gestionnaire pour SIGCHLD.

           SA_NOCLDWAIT (depuis Linux 2.6)
                  Si signum vaut SIGCHLD,  ne  pas  transformer  les  fils  en
                  zombies lorsqu'ils se terminent. Consultez aussi waitpid(2).
                  Cet attribut n'a de sens que lors de la mise en  place  d'un
                  gestionnaire pour SIGCHLD, ou lors de la configuration de la
                  disposition de signal de SIG_DFL.

                  Si l'attribut SA_NOCLDWAIT est defini lors  de  la  mise  en
                  place  d'un  gestionnaire  pour SIGCHLD, POSIX.1 ne specifie
                  pas si le signal SIGCHLD est genere lorsqu'un processus fils
                  se termine. Sous Linux, un signal SIGCHLD est genere dans ce
                  cas ; sur d'autres implementations, il ne l'est pas.

           SA_NODEFER
                  Ne pas empecher un signal d'etre recu depuis l'interieur  de
                  son  propre  gestionnaire. Cet attribut n'a de sens que lors
                  de la mise en place d'un gestionnaire de  signal.  SA_NOMASK
                  est un synonyme obsolete et non standard pour cet attribut.

           SA_ONSTACK
                  Appeler le gestionnaire avec une pile differente fournie par
                  sigaltstack(2). Si cette pile est indisponible, on utilisera
                  la  pile par defaut. Cet attribut n'a de sens que lors de la
                  mise en place d'un gestionnaire de signal.

           SA_RESETHAND
                  Retablir l'action a son comportement par defaut une fois que
                  le  gestionnaire  a ete appele. Cet attribut n'a de sens que
                  lors de la  mise  en  place  d'un  gestionnaire  de  signal.
                  SA_ONESHOT est un synonyme obsolete et non standard pour cet
                  attribut.

           SA_RESTART
                  Fournir un comportement compatible avec la semantique BSD en
                  redemarrant   automatiquement   les   appels  systeme  lents
                  interrompus par l'arrivee du signal.  Cet  attribut  n'a  de
                  sens  que  lors  de  la  mise  en place d'un gestionnaire de
                  signal. Consultez  signal(7)  pour  une  discussion  sur  le
                  redemarrage d'un appel systeme.

           SA_SIGINFO (depuis Linux 2.2)
                  Le  gestionnaire  de  signal recevra trois arguments, et non
                  plus un seul. Dans  ce  cas,  il  faut  utiliser  le  membre
                  sa_sigaction au lieu de sa_handler. Cet attribut n'a de sens
                  que lors de la mise en place d'un gestionnaire de signal.

       Le parametre siginfo_t de la routine  sa_sigaction  est  une  structure
       contenant les elements suivants :

           siginfo_t {
               int      si_signo;    /* Numero de signal           */
               int      si_errno;    /* Numero d'erreur            */
               int      si_code;     /* Code du signal             */
               int      si_trapno;   /* Numero de trappe qui a cause
                                        le signal genere par le
                                        materiel (pas utilise sur la
                                        plupart des architectures) */
               pid_t    si_pid;      /* PID de l'emetteur          */
               uid_t    si_uid;      /* UID reel de l'emetteur     */
               int      si_status;   /* Valeur de sortie ou signal */
               clock_t  si_utime;    /* Temps utilisateur ecoule   */
               clock_t  si_stime;    /* Temps systeme ecoule       */
               sigval_t si_value;    /* Valeur de signal           */
               int      si_int;      /* Signal POSIX.1b            */
               void    *si_ptr;      /* Signal POSIX.1b            */
               int      si_overrun;  /* Decompte de depassement des
                                        horloges (POSIX.1b)        */
               int      si_timerid;  /* ID d'horloge (POSIX.1b)    */
               void    *si_addr;     /* Emplacement memoire ayant
                                        cause l'erreur             */
               long     si_band;     /* Band event (etait int dans
                                        glibc 2.3.2 et anterieures */
               int      si_fd;       /* Descripteur de fichier     */
               short    si_addr_lsb; /* Bit le moins significatif de l'adresse
                                        (depuis le noyau 2.6.32)   */
           }

       si_signo,  si_errno  et  si_code  sont  definis  pour  tous les signaux
       (si_errno n'est generalement pas utilise sous Linux). Le  reste  de  la
       structure  peut  etre  une  union, de telle sorte qu'on puisse lire les
       champs specifiques a chaque signaux.

       * Les signaux envoyes avec kill(2) et sigqueue(2) remplissent si_pid et
         si_uid.  De  plus,  les  signaux envoyes avec sigqueue(2) remplissent
         si_int et si_ptr  avec  les  valeurs  specifiees  par  l'emetteur  du
         signal ; voyez sigqueue(2) pour plus de details.

       * Les  signaux  envoyes  par  les  horloges POSIX.1b (depuis Linux 2.6)
         remplissent si_overrun et si_timerid.  Le  champ  si_timerid  est  un
         identifiant  interne utilise par le noyau pour identifier l'horloge ;
         ce n'est pas la meme chose que l'identifient  d'horloge  renvoye  par
         timer_create(2).  Le  champ si_overrun est le compteur de depassement
         de l'horloge ; il s'agit de la meme information renvoyee par un appel
         a  timer_getoverrun(2).  Ces  champs  sont  des  extensions Linux non
         standard.

       * Les signaux envoyes pour  les  notifications  de  files  de  messages
         (voyez  la description de SIGEV_SIGNAL dans mq_notify(3)) remplissent
         si_int/si_ptr avec la valeur  sigev_value  fournie  a  mq_notify(3) ;
         si_pid  avec l'identifiant du processus de l'emetteur du message ; et
         si_uid  avec  l'identifiant  d'utilisateur  reel  de  l'emetteur   du
         message.

       * SIGCHLD remplit si_pid, si_uid, si_status, si_utime et si_stime, pour
         fournir des informations au sujet  des  fils.  Le  champ  si_pid  est
         l'identifiant   de  processus  du  fils ;  si_uid  est  l'identifiant
         d'utilisateur reel du fils. Le champ si_status contient  le  code  de
         sortie  du  fils (si si_code vaut CLD_EXITED), ou le numero du signal
         qui a change l'etat du processus. Les  champs  si_utime  et  si_stime
         comprennent les temps utilisateur et systeme utilise par le processus
         fils ; ces champs ne comprennent pas le temps utilise  par  les  fils
         lorsqu'ils  sont  attendus (au contraire de getrusage(2) et time(2)).
         Dans les noyaux anterieurs a la version 2.6,  et  depuis  la  version
         2.6.27,   ces   champs   renvoient   le   temps   CPU   en  unite  de
         sysconf(_SC_CLK_TCK). Dans les noyaux de la serie 2.6, avant le noyau
         2.6.27, un bogue faisait que ces champs renvoyaient des temps mesures
         en jiffy systeme (consultez time(7)).

       * SIGILL, SIGFPE, SIGSEGV, SIGBUS et SIGTRAP remplissent  si_addr  avec
         l'adresse  de  l'erreur.  Sur  certaines  architectures,  ces signaux
         remplissent aussi le champ si_trapno. Certaines categories  d'erreurs
         de SIGBUS, en particulier BUS_MCEERR_AO et BUS_MCEERR_AR, remplissent
         aussi le champ si_addr_lsb, qui contient le bit le moins significatif
         de  l'erreur  signalee,  et  permet donc de connaitre l'etendue de la
         corruption  des  donnees.  Par  exemple,  si  une  page  entiere  est
         corrompue,    si_addr_lsb    contient    log2(sysconf(_SC_PAGESIZE)).
         BUS_MCERR_* et si_addr_lsb sont des extensions specifiques a Linux.

       * SIGPOLL/SIGIO remplissent si_band et si_fd. L'evenement  si_band  est
         un  masque  de  bits  contenant les memes valeurs que celles qui sont
         remplies dans le champ revents par poll(2). Le champ si_fd  donne  le
         descripteur  de  fichiers  sur  lequel  l'evenement d'entrees-sorties
         s'est produit.

       si_code est une valeur (pas un masque de bits) qui indique pourquoi  ce
       signal  a  ete  envoye.  La liste suivante indique les valeurs que peut
       prendre si_code pour n'importe quel signal, avec la raison associee.

           SI_USER        kill(2) ou raise(3)

           SI_KERNEL      Envoye par le noyau.

           SI_QUEUE       sigqueue(2)

           SI_TIMER       Fin d'une temporisation POSIX

           SI_MESGQ       Changement d'etat d'une  file  de  messages  (depuis
                          Linux 2.6.6) ; consultez mq_notify(3)

           SI_ASYNCIO     Fin d'une AIO

           SI_SIGIO       SIGIO empile

           SI_TKILL       tkill(2) ou tgkill(2) (depuis Linux 2.4.19)

       Les  valeurs  suivantes  peuvent etre prises par si_code pour un signal
       SIGILL :

           ILL_ILLOPC     opcode illegal

           ILL_ILLOPN     operande illegale

           ILL_ILLADR     mode d'adressage illegal

           ILL_ILLTRP     trappe illegale

           ILL_PRVOPC     opcode privilegie

           ILL_PRVREG     registre privilegie

           ILL_COPROC     erreur de coprocesseur

           ILL_BADSTK     erreur interne de pile

       Les valeurs suivantes peuvent etre prises par si_code  pour  un  signal
       SIGFPE :

           FPE_INTDIV     division entiere par zero

           FPE_INTOVF     debordement entier

           FPE_FLTDIV     division flottante par zero

           FPE_FLTOVF     debordement flottant

           FPE_FLTUND     debordement inferieur flottant

           FPE_FLTRES     resultat flottant inexact

           FPE_FLTINV     operation flottante invalide

           FPE_FLTSUB     indice hors intervalle

       Les  valeurs  suivantes  peuvent etre prises par si_code pour un signal
       SIGSEGV :

           SEGV_MAPERR    adresse sans objet

           SEGV_ACCERR    permissions invalides pour l'objet

       Les valeurs suivantes peuvent etre prises par si_code  pour  un  signal
       SIGBUS :

           BUS_ADRALN     alignement d'adresse invalide

           BUS_ADRERR     adresse physique inexistante

           BUS_OBJERR     erreur materielle specifique

           BUS_MCEERR_AR (depuis Linux 2.6.32)
                          erreur   memoire   materielle   consommee   lors  de
                          verification de la machine ; action requise.

           BUS_MCEERR_AO (depuis Linux 2.6.32)
                          erreur memoire materielle detectee dans le processus
                          mais non consommee ; action optionnelle.

       Les  valeurs  suivantes  peuvent etre prises par si_code pour un signal
       SIGTRAP :

           TRAP_BRKPT     point d'arret du processus

           TRAP_TRACE     suivi d'execution du processus

           TRAP_BRANCH (depuis Linux 2.4)
                          suivi des branches prises par le processus

           TRAP_HWBKPT (depuis Linux 2.4)
                          point d'arret/point a surveiller materiels

       Les valeurs suivantes peuvent etre prises par si_code  pour  un  signal
       SIGCHLD :

           CLD_EXITED     fils termine normalement

           CLD_KILLED     fils tue par un signal

           CLD_DUMPED     fils termine anormalement

           CLD_TRAPPED    fils en cours de suivi

           CLD_STOPPED    fils arrete

           CLD_CONTINUED  fils arrete a redemarre (depuis Linux 2.6.9)

       Les  valeurs  suivantes  peuvent etre prises par si_code pour un signal
       SIGPOLL :

           POLL_IN        donnees disponibles en entree

           POLL_OUT       tampons de sortie libres

           POLL_MSG       message disponible en entree

           POLL_ERR       erreur d'entree-sortie

           POLL_PRI       entree haute priorite disponible

           POLL_HUP       peripherique debranche

VALEUR RENVOY'EE

       sigaction() renvoie 0 s'il reussit, et -1 en cas d'erreur.

ERREURS

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

       EINVAL Un  signal  invalide  est  indique. Ceci se produit egalement si
              l'on tente de modifier l'action associee aux signaux SIGKILL  ou
              SIGSTOP, qui ne peuvent pas etre interceptes ou ignores.

CONFORMIT'E

       POSIX.1-2001, SVr4.

NOTES

       Un fils cree par fork(2) herite d'une copie des dispositions de signaux
       de son pere. Lors d'un execve(2), les dispositions des signaux pris  en
       charge  sont  remises  aux  valeurs  par  defaut ; les dispositions des
       signaux ignores ne sont pas modifiees.

       Comme specifie par POSIX, le comportement d'un processus  est  indefini
       apres  la  reception d'un signal SIGFPE, SIGILL, ou SIGSEGV qui n'a pas
       ete engendre par une fonction kill(2) ou raise(3). La division  entiere
       par  zero  a  un  resultat  indefini,  sur certaines architectures elle
       declenche un signal SIGFPE. De meme, diviser l'entier le  plus  negatif
       par -1 peut declencher SIGFPE.

       POSIX.1-1990  interdisait  d'ignorer SIGCHLD avec SIG_IGN. POSIX.1-2001
       l'autorise, et ignorer SIGCHLD permet  donc  d'eviter  la  creation  de
       zombies  (consultez  wait(2)). Cependant, les comportements historiques
       de BSD et de System V quand SIGCHLD est ignore different, donc la seule
       methode completement portable pour s'assurer que les fils ne deviennent
       pas des zombies a leur terminaison est d'intercepter le signal  SIGCHLD
       et d'invoquer wait(2) ou equivalent.

       POSIX.1-1990  ne  documentait  que  SA_NOCLDSTOP. POSIX.1-2001 a ajoute
       SA_NOCLDWAIT, SA_RESETHAND, SA_NODEFER et SA_SIGINFO. L'utilisation  de
       ces  dernieres  valeurs dans sa_flags peut etre moins portable dans les
       applications censees s'executer sur des implementations Unix anciennes.

       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 ).

       sigaction()  peut  etre  appele  avec  un  second  argument a NULL pour
       obtenir le gestionnaire de signaux actuel. On peut aussi verifier si un
       signal  est  valide  sur  la  machine  actuelle  en l'appelant avec les
       deuxieme et troisieme arguments qui valent NULL.

       Il est impossible de bloquer SIGKILL or SIGSTOP (en les indiquant  dans
       sa_mask). Les tentatives seront ignorees silencieusement.

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

       Consultez signal(7) pour une liste de fonctions sures pour les  signaux
       asynchrones qui peuvent etre appelee dans les gestionnaires de signaux.

   Non document'e
       Avant  l'introduction  de  l'attribut SA_SIGINFO il etait deja possible
       d'obtenir des informations supplementaires, en ajoutant  au  sa_handler
       un  second  parametre de type struct sigcontext. On peut retrouver ceci
       dans les sources du noyau. Ce mecanisme est desormais obsolete.

BOGUES

       Dans  les  noyaux  jusqu'a  2.6.13  inclus,  indiquer  SA_NODEFER  dans
       sa_flags  empechait  non seulement le signal recu d'etre masque pendant
       l'execution du gestionnaire, mais empechait egalement  les  signaux  de
       sa_mask d'etre masques. Ce bogue a ete corrige dans Linux 2.6.14.

EXEMPLE

       Consultez mprotect(2).

VOIR AUSSI

       kill(1),   kill(2),  killpg(2),  pause(2),  sigaltstack(2),  signal(2),
       signalfd(2), sigpending(2), sigprocmask(2), sigqueue(2), sigsuspend(2),
       wait(2),  raise(3),  siginterrupt(3), sigsetops(3), sigvec(3), core(5),
       signal(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain   Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.