rt_sigqueueinfo, rt_tgsigqueueinfo - Mettre un signal et des données dans
la file d'attente d'un processus
Bibliothèque C standard (
libc,
-lc)
#include <linux/signal.h> /* Définition des constantes SI_* */
#include <sys/syscall.h> /* Définition des constantes SYS_* */
#include <unistd.h>
int syscall(SYS_rt_sigqueueinfo, pid_t tgid,
int sig, siginfo_t *info);
int syscall(SYS_rt_tgsigqueueinfo, pid_t tgid, pid_t tid,
int sig, siginfo_t *info);
Remarque : il n'existe pas de fonctions glibc autour de ces appels
système ; consultez
NOTES.
Les appels système
rt_sigqueueinfo() et
rt_tgsigqueueinfo()
sont les interfaces de bas niveau utilisées pour envoyer un signal
accompagné de données à un processus ou à un
thread. Le récepteur du signal peut obtenir les données
associées en établissant un gestionnaire de signal à
l'aide de l'attribut
SA_SIGINFO de
sigaction(2).
Ces appels système ne sont pas destinés à être
utilisés directement par une application ; ils sont fournis pour
permettre l'implémentation de
sigqueue(3) et
pthread_sigqueue(3).
L'appel système
rt_sigqueueinfo() envoie le signal
sig au
groupe de threads dont l'identifiant est
tgid. (Le terme
« groupe de threads » est synonyme de
« processus » et
tid correspond à
l'identifiant de processus UNIX traditionnel.) Le signal sera
délivré à un membre arbitraire de ce groupe de threads
(c'est-à-dire un des threads qui n'est pas en train de bloquer le
signal).
Le paramètre
info spécifie les données devant
accompagner le signal. Ce paramètre est un pointeur vers une structure
de type
siginfo_t décrite dans
sigaction(2) (et
définie en incluant
<sigaction.h>). L'appelant doit
positionner les champs suivants dans cette structure :
- si_code
- Cela doit être un des codes SI_* du fichier
source du noyau Linux include/asm-generic/siginfo.h. Si le signal
doit être envoyé à un autre processus que l'appelant
lui-même, les restrictions suivantes s'appliquent :
- •
- Le code ne peut pas être une valeur
supérieure ou égale à zéro. En particulier, il
ne peut s'agir de SI_USER qui est utilisé par le noyau pour
indiquer un signal envoyé par kill(2), ni de
SI_KERNEL qui est utilisé pour indiquer un signal
généré par le noyau.
- •
- Le code ne peut pas (depuis Linux 2.6.39)
être SI_TKILL qui est utilisé par le noyau pour
indiquer le signal envoyé en utilisant tgkill(2).
- si_pid
- Cela doit être égal à l'identifiant
d'un processus, typiquement celui du processus émetteur.
- si_uid
- Cela doit être égal à l'identifiant
d'un utilisateur, typiquement l'identifiant utilisateur réel de
l'émetteur.
- si_value
- Ce champ contient les données utilisateur pour
accompagner le signal. Pour plus d'informations, consultez la description
du dernier argument ( union_sigval) de sigqueue(3).
De manière interne, le noyau positionne le champ
si_signo à
la valeur indiquée dans
sig, de sorte que le récepteur du
signal puisse aussi obtenir le numéro du signal à l’aide
de ce champ.
L'appel système
rt_tgsigqueueinfo() fonctionne comme
rt_sigqueueinfo(), mais n'envoie le signal et les données
qu'à l'unique thread indiqué par la combinaison de
tgid,
un identifiant de groupe de threads, et de
tid, un thread dans ce
groupe.
En cas du succès, ces appels système renvoient
0. Dans le
cas contraire, ils renvoient
-1 et remplissent
errno avec le
code d'erreur.
- EAGAIN
- La limite du nombre de signaux en file d’attente a
été atteinte (consultez signal(7) pour plus
d'informations).
- EINVAL
-
sig, tgid ou tid n'est pas
valable.
- EPERM
- L'appelant n'a pas le droit d'envoyer un signal à la
cible. Pour les droits nécessaires, consultez kill(2).
- EPERM
-
tgid indique un autre processus que l'appelant et
info->si_code n'est pas valable.
- ESRCH
-
rt_sigqueueinfo() : aucun groupe de threads
correspondant à tgid n'a été
trouvé.
rt_tgsigqueinfo() : aucun thread correspondant à
tgid et
tid n'a été trouvé.
L'appel système
rt_sigqueueinfo() a été
ajouté dans Linux 2.2. L'appel système
rt_tgsigqueueinfo() a été ajouté dans
Linux 2.6.31.
Ces appels système sont spécifiques à Linux.
Comme ces appels système ne sont pas destinés à être
utilisés par une application, il n'existe aucune fonction
d'encapsulation glibc ; utilisez
syscall(2) dans le cas peu
probable où vous voudriez les appeler directement.
Comme pour
kill(2), le signal nul (
0) peut être
utilisé pour vérifier si le processus ou le thread
indiqué existe.
kill(2),
pidfd_send_signal(2),
sigaction(2),
sigprocmask(2),
tgkill(2),
pthread_sigqueue(3),
sigqueue(3),
signal(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Cédric Boutillier <
[email protected]>,
Frédéric Hantrais <
[email protected]> et Jean-Philippe
MENGUAL <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 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 à
[email protected]