Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

       sigprocmask, rt_sigprocmask - Examiner et modifier les signaux bloqués

SYNOPSIS

       #include <signal.h>

       /* Prototype de la fonction enveloppe de la glibc */
       int sigprocmask(int how, const sigset_t *restrict set,
                       sigset_t *restrict oldset);

       #include <signal.h>            /* Définition des constantes SIG_* */
       #include <sys/syscall.h>       /* Définition des constantes SYS_* */
       #include <unistd.h>

       /* Prototype de l'appel système sous-jacent */
       int syscall(SYS_rt_sigprocmask, int how, const kernel_sigset_t *set,
                       kernel_sigset_t *oldset, size_t sigsetsize);

       /* Prototype de l'appel système basique (obsolète) */
       int syscall(SYS_sigprocmask, int how, const old_kernel_sigset_t *set,
                       old_kernel_sigset_t *oldset);

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consulter
   feature_test_macros(7)) :

       sigprocmask() :
           _POSIX_C_SOURCE

DESCRIPTION

       L'appel sigprocmask() est utilisé pour récupérer et/ou changer le  masque  de  signaux  du
       thread  appelant. Le masque de signaux est l'ensemble des signaux dont la distribution est
       actuellement bloquée pour l'appelant (consultez également signal(7) pour plus de détails).

       Son comportement est dépendant 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 supprimés de la liste des signaux bloqués. Il
              est permis de débloquer un signal non bloqué.

       SIG_SETMASK
              L'ensemble des signaux bloqués est égal à l'argument set.

       Si oldset n'est pas NULL, la valeur précédente du  masque  de  signaux  est  stockée  dans
       oldset.

       Si  set  est  NULL,  le masque de signaux n'est pas modifié (how est donc ignoré), mais la
       valeur actuelle du masque de signaux est tout de même renvoyée dans oldset (s'il n'est pas
       NULL).

       Un  ensemble  de  fonctions  pour modifier et voir les variables de type sigset_t ("signal
       sets") est décrit dans sigsetops(3).

       L'utilisation  de  sigprocmask()  dans  un  processus  multithreadé  n'est  pas  définie ;
       consultez pthread_sigmask(3).

VALEUR RENVOYÉE

       sigprocmask()  renvoie  0  s'il  réussit.  En  cas  d'échec,  -1  est renvoyé et errno est
       positionné pour indiquer l'erreur.

ERREURS

       EFAULT L'un des paramètres set ou oldset pointe vers une zone mémoire n'appartenant pas  à
              l'espace d'adressage alloué du processus.

       EINVAL Soit  la  valeur indiquée dans how n'est pas valable, soit le noyau ne prend pas en
              charge la taille passée à sigsetsize.

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008.

NOTES

       Il est impossible de bloquer SIGKILL ou SIGSTOP avec l'appel sigprocmask.  Les  tentatives
       seront ignorées silencieusement.

       Chacun des threads d'un processus a son propre masque de signaux.

       Un  processus  enfant  créé  avec  fork(2)  hérite d'une copie du masque de signaux de son
       parent. Le masque de signaux est conservé au travers d'un execve(2).

       Si l'un des signaux SIGBUS, SIGFPE, SIGILL ou SIGSEGV est généré alors qu'il  est  bloqué,
       le  résultat  est  indéfini,  sauf  si  le signal a été généré par kill(2), sigqueue(3) ou
       raise(3).

       Consultez sigsetops(3) pour les détails concernant les ensembles de signaux.

       Remarquez qu'il est acceptable (bien que peu utile) de  renseigner  tant  set  que  oldset
       comme NULL.

   différences entre bibliothèque C et noyau
       La  définition  du  noyau  de  sigset_t  diffère  par  la  taille de celle utilisée par la
       bibliothèque C. Dans cette page de manuel, on fait référence à  l'ancienne  quand  on  dit
       kernel_sigset_t (elle s'appelle cependant sigset_t dans les sources du noyau).

       La  fonction  enveloppe sigprocmask() de la glibc ignore silencieusement les tentatives de
       blocage des deux signaux en  temps  réel  utilisés  en  interne  par  l'implémentation  de
       threading NPTL. Consultez nptl(7) pour des détails.

       L'appel  système  Linux  d'origine s'appelait sigprocmask(). Toutefois, avec l'arrivée des
       signaux en temps réel dans Linux 2.2 et de la taille  figée,  le  type  sigset_t  32  bits
       (désigné  comme  old_kernel_sigset_t  dans  cette  page de manuel), pris en charge par cet
       appel système ne convenait plus à cet objectif. Par conséquent, un  nouvel  appel  système
       rt_sigprocmask(),  a  été  ajouté  pour prendre en charge le type sigset_t élargi (désigné
       comme kernel_sigset_t dans cette page  de  manuel).  Le  nouvel  appel  système  prend  un
       quatrième  paramètre,  size_t  sigsetsize,  qui  indique  la  taille en octets des jeux de
       signaux dans set et dans oldset. Ce paramètre est actuellement nécessaire pour obtenir une
       valeur fixe spécifique à l'architecture (équivalente à sizeof(kernel_sigset_t)).

       La  fonction  enveloppe  sigprocmask()  de la glibc nous cache ces détails, en appelant de
       manière transparente rt_sigprocmask() quand le noyau le fournit.

VOIR AUSSI

       kill(2),    pause(2),    sigaction(2),    signal(2),     sigpending(2),     sigsuspend(2),
       pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)

COLOPHON

       Cette  page  fait partie de la publication 5.13 du projet man-pages Linux. Une description
       du projet et des instructions pour signaler des anomalies et la dernière version de  cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Cédric   Boutillier
       <cedric.boutillier@gmail.com>,  Frédéric  Hantrais  <fhantrais@gmail.com> et Jean-Philippe
       MENGUAL <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.