sigwaitinfo(2) System Calls Manual sigwaitinfo(2) NOM sigwaitinfo, sigtimedwait, rt_sigtimedwait - Attente synchrone de si- gnaux BIBLIOTHÈQUE Bibliothèque C standard (libc, -lc) SYNOPSIS #include <signal.h> int sigwaitinfo(const sigset_t *restrict set, siginfo_t *_Nullable restrict info); int sigtimedwait(const sigset_t *restrict set, siginfo_t *_Nullable restrict info, const struct timespec *restrict timeout); 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 clas- sement habituelles. Consultez signal(7) pour plus de détails. sigtimedwait() opère exactement comme sigwaitinfo(), mais elle a un ar- gument supplémentaire, délai, qui permet de définir le temps pendant lequel le thread est suspendu dans l'attente d'un signal. (Cet inter- valle 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'ordonnan- cement du noyau.) Cet argument est une structure timespec(3). Si les deux champs de cette structure sont nuls, sigtimedwait() revient tout de suite, soit avec des informations sur un signal déjà en at- tente, 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 expira- tion du délai indiqué pour sigtimedwait(). EINTR L'appel a été interrompu par un gestionnaire de signal ; consul- tez signal(7). (Un signal autre que ceux présents dans l'en- semble.) EINVAL délai était invalide. STANDARDS 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 ges- tionnaire 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 silen- cieusement. 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 si- gnal. sigwaitinfo() ou sigtimedwait() ne peuvent pas être utilisés pour rece- voir 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 fonc- tion enveloppe sigtimedwait() de la glibc nous cache ces détails en ap- pelant de manière transparente rt_sigtimedwait() quand le noyau le fournit. VOIR AUSSI kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigproc- mask(2), sigqueue(3), sigsetops(3), sigwait(3), timespec(3), signal(7), time(7) TRADUCTION La traduction française de cette page de manuel a été créée par Chris- tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste- phan.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.cou- lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centra- liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <si- mon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@de- bian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <ce- dric.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⟩. Pages du manuel de Linux 6.03 3 décembre 2022 sigwaitinfo(2)
Generated by dwww version 1.15 on Sat Jun 29 00:40:03 CEST 2024.