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

NOM

       sigwaitinfo, sigtimedwait, rt_sigtimedwait - Attente synchrone de signaux

SYNOPSIS

       #include <signal.h>

       int sigwaitinfo(const sigset_t *restrict ensemble,
                       siginfo_t *restrict info);
       int sigtimedwait(const sigset_t *restrict ensemble,
                       siginfo_t *restrict info,
                       const struct timespec *restrict délai);

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

       sigwaitinfo(), sigtimedwait() :
           _POSIX_C_SOURCE >= 199309L

DESCRIPTION

       sigwaitinfo() suspend l'exécution du thread appelant jusqu'à ce que l'un  des  signaux  de
       l'ensemble soit en attente. (Si l'un des signaux de l'ensemble est déjà en attente pour le
       thread appelant, sigwaitinfo() rend la main immédiatement).

       sigwaitinfo() retire le signal de l'ensemble des signaux en attente, et renvoie le  numéro
       du  signal comme valeur de retour. Si l'argument info n'est pas NULL, alors le tampon vers
       lequel il pointe est utilisé pour renvoyer une  structure  du  type  siginfo_t  (consultez
       sigaction(2)) contenant les informations concernant le signal.

       Si plusieurs signaux de l'ensemble sont mis en attente pour l'appelant, le signal récupéré
       sigwaitinfo() est déterminé par les règles de classement habituelles. Consultez  signal(7)
       pour plus de détails.

       sigtimedwait()   opère   exactement   comme   sigwaitinfo(),   mais  elle  a  un  argument
       supplémentaire, délai, qui permet de  définir  le  temps  pendant  lequel  le  thread  est
       suspendu dans l'attente d'un signal. (Cet intervalle de temps est arrondi à la granularité
       de l'horloge système et cet intervalle peut être modifié légèrement  à  cause  des  délais
       d'ordonnancement du noyau.) Cet argument est du type :

           struct timespec {
               long    tv_sec;         /* secondes */
               long    tv_nsec;        /* nanosecondes */
           }

       Si  les  deux  champs  de cette structure sont nuls, sigtimedwait() revient tout de suite,
       soit avec des informations sur un signal déjà en attente, soit avec une  erreur  si  aucun
       signaux de l'ensemble n'étaient disponibles.

VALEUR RENVOYÉE

       S'ils  réussissent  sigwaitinfo()  et  sigtimedwait()  renvoient  un numéro de signal (une
       valeur supérieure à zéro). S'ils échouent, ils renvoient -1  et  errno  contient  le  code
       d'erreur.

ERREURS

       EAGAIN Aucun signal de l'ensemble n'a été mis en attente avant expiration du délai indiqué
              pour sigtimedwait().

       EINTR  L'appel a été interrompu par un gestionnaire de signal ; consultez  signal(7).  (Un
              signal autre que ceux présents dans l'ensemble.)

       EINVAL délai était invalide.

CONFORMITÉ

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

NOTES

       En  utilisation  habituelle, l'appelant bloque les signaux de l'ensemble au préalable avec
       un appel sigprocmask(2) (afin que la délivrance des signaux ne se produise pas s'ils  sont
       mis  en  attente  entre  deux  appels  successifs  à  sigwaitinfo()  ou sigtimedwait()) et
       n'installe pas de gestionnaire pour ces signaux. Dans un programme multithreadé, le signal
       doit  être  bloqué  dans  tous  les  threads  pour  empêcher  que le signal ne soit traité
       conformément à sa disposition  par  défaut  dans  un  autre  thread  que  celui  exécutant
       sigwaitinfo() ou sigtimedwait().

       L'ensemble  des signaux qui sont en attente pour un thread donné est l'union de l'ensemble
       des signaux spécifiquement en attente pour ce thread  et  de  l'ensemble  des  signaux  en
       attente pour le processus lui-même (consultez signal(7)).

       Les tentatives pour attendre SIGKILL or SIGSTOP seront ignorées silencieusement.

       Si  plusieurs  threads d'un processus sont bloqués dans sigwaitinfo() ou sigtimedwait() en
       attente du ou des mêmes signaux, un seul des threads recevra réellement le signal s'il est
       mis  en  attente pour le processus (dans son ensemble) ; on ne peut pas savoir quel thread
       recevra le signal.

       sigwaitinfo() ou sigtimedwait() ne peuvent pas être utilisés  pour  recevoir  des  signaux
       générés  de  manière  synchronisée, tels que le signal SIGSEGV qui provient d'un accès non
       valable à l'adresse mémoire ou SIGFPE qui fait suite à une erreur  arithmétique.  De  tels
       signaux ne peuvent être récupérés qu'à l'aide d'un gestionnaire de signal.

       POSIX  ne  spécifie  pas  le  comportement si une valeur NULL est indiquée pour l'argument
       délai de sigtimedwait(), permettant par exemple d'avoir le même comportement que celui  de
       sigwaitinfo(), ce qui est le cas sous Linux.

   différences entre bibliothèque C et noyau
       Sous  Linux,  sigwaitinfo()  est  une  fonction  de  bibliothèque implémentée au dessus de
       sigtimedwait().

       Les  fonctions  enveloppes  sigwaitinfo()  et  sigtimedwait()   de   la   glibc   ignorent
       silencieusement  les  tentatives  pour attendre les deux signaux en temps réel utilisés en
       interne par l'implémentation de threading de NPTL. Consultez nptl(7) pour les détails.

       L'appel système Linux d'origine s'appelait sigtimedwait(). 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 pris
       en charge par cet appel système ne convenait plus  à  cet  objectif.  Par  conséquent,  un
       nouvel  appel  système  rt_sigtimedwait()  a  été  ajouté  pour  prendre en charge le type
       sigset_t élargi. Le nouvel appel système prend un quatrième paramètre, size_t  sigsetsize,
       qui  indique  la  taille  en  octets  des jeux de signal dans l'ensemble. Ce paramètre est
       actuellement nécessaire pour  obtenir  la  valeur  sizeof(sigset_t)  (ou  le  résultat  de
       l'erreur  EINVAL). La fonction enveloppe sigtimedwait() de la glibc nous cache ces détails
       en appelant de manière transparente rt_sigtimedwait() quand le noyau le fournit.

VOIR AUSSI

       kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigqueue(3),
       sigsetops(3), sigwait(3), signal(7), time(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⟩.