1. NOM▲
pthread_sigmask - Examiner et modifier le masque des signaux bloqués
2. SYNOPSIS ▲
#include <signal.h>
int
pthread_sigmask
(
int
how, const
sigset_t *
set, sigset_t *
oldset);
Compilez et effectuez l'édition des liens avec l'option -pthread.
3. DESCRIPTION ▲
La fonction pthread_sigmask() est identique à sigprocmask(2), à la différence près que son utilisation dans des programmes multithread est explicitement spécifié dans POSIX.1-2001. D'autres différences soont indiquées dans cette page. Pour une description des arguments et du mode d'opération de cette fonction, consultez sigprocmask(2).
4. VALEUR RENVOYÉE ▲
En cas de réussite, pthread_sigmask() renvoie 0 ; en cas d'erreur, elle renvoie un numéro d'erreur.
5. ERREURS ▲
Consultez sigprocmask(2).
6. CONFORMITÉ ▲
POSIX.1-2001.
7. NOTES ▲
Un nouveau thread hérite d'une copie du masque de signaux de son créateur.
8. EXEMPLE ▲
Le programme ci-dessous bloque certains signaux dans le thread principal, puis crée un thread dédié pour récupérer ces signaux avec sigwait(3). La session d'interpréteur de commande ci-dessous démontre l'utilisation du programme.
$ ./
a.out &
[1
] 5423
$ kill -
QUIT %
1
Signal handling thread got signal 3
$ kill -
USR1 %
1
Signal handling thread got signal 10
$ kill -
TERM %
1
[1
]+
Terminated ./
a.out
8.1. Source du programme ▲
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
/* Simple error handling functions */
#define handle_error_en(en, msg) \
do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
static
void
*
sig_thread
(
void
*
arg)
{
sigset_t *
set =
arg;
int
s, sig;
for
(
;;) {
s =
sigwait
(
set, &
sig);
if
(
s !=
0
)
handle_error_en
(
s, "
sigwait
"
);
printf
(
"
Signal handling thread got signal %d
\n
"
, sig);
}
}
int
main
(
int
argc, char
*
argv[])
{
pthread_t thread;
sigset_t set;
int
s;
/* Block SIGQUIT and SIGUSR1; other threads created by main()
will inherit a copy of the signal mask. */
sigemptyset
(&
set);
sigaddset
(&
set, SIGQUIT);
sigaddset
(&
set, SIGUSR1);
s =
pthread_sigmask
(
SIG_BLOCK, &
set, NULL
);
if
(
s !=
0
)
handle_error_en
(
s, "
pthread_sigmask
"
);
s =
pthread_create
(&
thread, NULL
, &
sig_thread, (
void
*
) &
set);
if
(
s !=
0
)
handle_error_en
(
s, "
pthread_create
"
);
/* Main thread carries on to create other threads and/or do
other work */
pause
(
); /* Dummy pause so we can test program */
}
9. VOIR AUSSI ▲
sigaction(2), sigpending(2), sigprocmask(2), pthread_create(3), pthread_kill(3), sigsetops(3), pthreads(7), signal(7)
10. COLOPHON ▲
Cette page fait partie de la publication 3.52 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/.
11. 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/>.
Denis Barbier (2010).
Veuillez signaler toute erreur de traduction en écrivant à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».