NOM¶
sigwaitinfo, sigtimedwait - Attente synchrone de signaux
SYNOPSIS¶
#include <signal.h>
int sigwaitinfo(const sigset_t *set, siginfo_t *info);
int sigtimedwait(const sigset_t *set, siginfo_t *info,
const struct timespec *timeout);
Exigences de macros de test de fonctionnalités pour la glibc (consultez
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
set soit en attente. (Si l'un des
signaux de l'ensemble
set est déjà en attente pour le thread
appelant,
sigwaitinfo() retourne 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
set 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,
timeout, qui permet de définir
une limite maximale au 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
set
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 set n'a été mis
en attente avant expiration du délai timeout 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 set.)
- EINVAL
- timeout était invalide.
POSIX.1-2001.
NOTES¶
En utilisation habituelle, l'appelant bloque les signaux de l'ensemble
set 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 une 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.
POSIX ne spécifie pas le comportement si une valeur NULL est indiquée
pour l'argument
timeout de
sigtimedwait(), permettant par
exemple d'avoir le même comportement que celui de
sigwaitinfo(),
ce qui est le cas sous Linux.
Sous Linux,
sigwaitinfo() est une fonction de bibliothèque
implémentée au dessus de
sigtimedwait().
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 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».