名 前
pthread_sigmask − 禁 止 す る シ グ ナ ル マ ス ク の 確 認 と 変 更 を 行 う
書 式
#include <signal.h>
int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);
−pthread を 付 け て コ ン パ イ ル と リ ン ク を 行 う 。
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
pthread_sigmask():
_POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500
説 明
pthread_sigmask() 関 数 は sigprocmask(2) と 全 く 同 様 だ が 、 マ ル チ ス レ ッ ド プ ロ グ ラ ム で の 利 用 が POSIX.1−2001 で 明 示 的 に 規 定 さ れ て い る 点 が 異 な る 。 他 の 違 い は こ の マ ニ ュ ア ル ペ ー ジ で 説 明 す る 。 こ の 関 数 の 引 き 数 と 動 作 の 説 明 は sigprocmask(2) を 参 照 。
返 り 値
成 功 す る と 、 pthread_sigmask() は 0 を 返 す 。 エ ラ ー の 場 合 、 エ ラ ー 番 号 を 返 す 。
エ ラ ー
sigprocmask(2) を 参 照 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )
pthread_sigmask() 関 数 は ス レ ッ ド セ ー フ で あ る 。
準 拠
POSIX.1−2001.
注 意
新 し い ス レ ッ ド は 、 ス レ ッ ド を 作 成 し た ス レ ッ ド の シ グ ナ ル マ ス ク の コ ピ ー を 継 承 す る 。
例
以 下 の プ ロ グ ラ ム は 、 メ イ ン ス レ ッ ド で シ グ ナ ル の い く つ か を 禁 止 (block) す る よ う に 設 定 を 行 い 、 sigwait(3) 経 由 で そ れ ら の シ グ ナ ル を 集 め る 専 用 の ス レ ッ ド を 作 成 す る 。 下 記 の シ ェ ル の セ ッ シ ョ ン は そ の 利 用 例 を 示 し た も の で あ る 。
$ ./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 プ ロ グ
ラ ム の ソ ー
ス
#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 */ }
関 連 項 目
sigaction(2), sigpending(2), sigprocmask(2), pthread_create(3), pthread_kill(3), sigsetops(3), pthreads(7), signal(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。