Manpages

名 前

sigwaitinfo, sigtimedwait − キ ュ ー に 入 れ ら れ た シ グ ナ ル を 同 期 し て 待 つ

書 式

#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);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

sigwaitinfo(), sigtimedwait(): _POSIX_C_SOURCE >= 199309L

説 明

sigwaitinfo() は set の う ち の ど れ か の シ グ ナ ル が 処 理 待 ち に な る ま で 、 呼 び 出 し ス レ ッ ド の 実 行 を 一 時 停 止 す る (呼 び 出 し ス レ ッ ド に 対 し て set の う ち の ど れ か の シ グ ナ ル が 既 に 待 機 中 (pending) で あ る 場 合 、 sigwaitinfo() は す ぐ に 戻 る )。

sigwaitinfo() は そ の シ グ ナ ル を 待 機 中 の シ グ ナ ル の 集 合 か ら 削 除 し 、 関 数 の 結 果 と し て シ グ ナ ル 番 号 を 返 す 。 info 引 き 数 が NULL で な い 場 合 、 配 送 さ れ た シ グ ナ ル の 情 報 が 入 っ た siginfo_t 型 (sigaction(2) を 参 照 ) の 構 造 体 を info が 指 す バ ッ フ ァ ー に 入 れ て 返 す 。 呼 び 出 し 元 に 対 し て set の 複 数 の シ グ ナ ル が 処 理 待 ち の 場 合 、 sigwaitinfo() で 取 得 す る シ グ ナ ル は 通 常 の 順 序 決 定 ル ー ル に 基 づ い て 決 定 さ れ る 。 詳 細 は signal(7) を 参 照 の こ と 。

sigtimedwait() は 、 sigwaitinfo() と 次 の 点 を 除 い て 全 く 同 じ よ う に 動 作 す る 。 こ の 関 数 に は も う 1 つ の 引 き 数 timeout が あ り 、 シ グ ナ ル 待 ち で ス レ ッ ド が 一 時 停 止 す る 時 間 を 指 定 す る こ と が で き る (こ の 時 間 は シ ス テ ム ク ロ ッ ク の 粒 度 に 切 り 上 げ ら れ 、 カ ー ネ ル の ス ケ ジ ュ ー リ ン グ 遅 延 に よ り 少 し だ け 長 く な る 可 能 性 が あ る )。 こ の 引 き 数 の 型 は 以 下 の と お り で あ る :

struct timespec {
long tv_sec; /* 秒 */
long tv_nsec; /* ナ ノ 秒 */ } こ の 構 造 体 の 2 つ の フ ィ ー ル ド が と も に 0 の 場 合 、 ポ ー リ ン グ が 行 わ れ る : sigtimedwait() は 、 呼 び 出 し 側 プ ロ セ ス に 対 し て 待 機 し て い る シ グ ナ ル の 情 報 を 返 し て 戻 る か 、 set の う ち の ど の シ グ ナ ル も 待 機 し て い な い 場 合 は エ ラ ー を 返 し て 戻 る 。

返 り 値

成 功 し た 場 合 、 sigwaitinfo() と sigtimedwait() は シ グ ナ ル 番 号 (す な わ ち 0 よ り 大 き い 数 ) を 返 す 。 失 敗 し た 場 合 、 2 つ の 関 数 は −1 を 返 し 、 errno は エ ラ ー を 表 す 値 に 設 定 さ れ る 。

エ ラ ー

EAGAIN

set の う ち の ど の シ グ ナ ル も sigtimedwait() に 指 定 さ れ た timeout の 期 間 内 に 処 理 待 ち に な ら な か っ た 。

EINTR

シ グ ナ ル 待 ち が シ グ ナ ル ハ ン ド ラ ー に よ っ て 中 断 (interrupt) さ れ た (こ の ハ ン ド ラ ー は set に あ る シ グ ナ ル 以 外 の も の で あ る )。 signal(7) 参 照 。
EINVAL

timeout が 不 正 で あ る 。

準 拠

POSIX.1−2001.

注 意

通 常 の 使 用 法 で は 、 呼 び 出 し 側 プ ロ セ ス は こ れ ら の 関 数 よ り 先 に sigprocmask(2) の 呼 び 出 す こ と に よ り set に 含 ま れ る シ グ ナ ル を ブ ロ ッ ク し (そ の た め に こ れ ら の シ グ ナ ル が こ の 後 に 続 く sigwaitinfo() や sigtimedwait() の 呼 び 出 し の 間 に 処 理 待 ち に な っ た 場 合 に は 、 デ フ ォ ル ト の 動 作 は 行 わ れ ず )、 こ れ ら の シ グ ナ ル に 対 す る ハ ン ド ラ ー は 設 定 し な い 。 マ ル チ ス レ ッ ド プ ロ グ ラ ム で は 、 sigwaitinfo() や sigtimedwait() を 呼 び 出 し た ス レ ッ ド 以 外 の ス レ ッ ド で 、 そ の シ グ ナ ル が デ フ ォ ル ト の 動 作 に 基 い て 処 理 さ れ な い よ う に 、 全 て の ス レ ッ ド で 該 当 シ グ ナ ル を ブ ロ ッ ク す べ き で あ る 。 指 定 さ れ た ス レ ッ ド に 対 す る 処 理 待 ち の シ グ ナ ル の 集 合 は 、 そ の ス レ ッ ド 自 体 宛 て の 処 理 待 ち の シ グ ナ ル 集 合 と 、 プ ロ セ ス 全 体 宛 て の 処 理 待 ち の シ グ ナ ル 集 合 を あ わ せ た も の で あ る (signal(7) 参 照 )。

SIGKILLSIGSTOP を 待 と う と し た 場 合 、 黙 っ て 無 視 さ れ る 。 一 つ の プ ロ セ ス 内 の 複 数 の ス レ ッ ド が sigwaitinfo() や sigtimedwait() で 同 じ シ グ ナ ル を 待 っ て 停 止 し た 場 合 、 プ ロ セ ス 全 体 宛 て の シ グ ナ ル が 処 理 待 ち に な る と 、 複 数 の ス レ ッ ド の う ち 一 つ だ け が 実 際 に そ の シ グ ナ ル を 受 信 す る こ と に な る 。 ど の ス レ ッ ド が シ グ ナ ル を 受 信 す る か は 決 ま っ て い な い 。

POSIX で は sigtimedwait() の 引 き 数 timeout の 値 を NULL に し た 場 合 の 意 味 を 未 定 義 と し て い る 。 sigwaitinfo() を 呼 び 出 し た の と 同 じ 意 味 と し て も よ い こ と に な っ て お り 、 実 際 Linux で は こ の よ う に 動 作 す る 。

C ラ イ ブ ラ リ と カ ー ネ ル ABI の 違 い
Linux で は 、 sigwaitinfo() は sigtimedwait() を 用 い て 実 装 さ れ た ラ イ ブ ラ リ 関 数 で あ る 。 素 の sigtimedwait() シ ス テ ム コ ー ル は 5 番 目 の 引 き 数 size_t sigsetsize を 取 る 。 こ の 引 き 数 は set 引 き 数 の バ イ ト 単 位 の サ イ ズ を 指 定 す る 。 glibc の sigtimedwait() の ラ ッ パ ー 関 数 は こ の 引 き 数 に 固 定 値 (sizeof(sigset_t) と 同 じ ) を 指 定 す る 。

関 連 項 目

kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigqueue(3), sigsetops(3), sigwait(3), signal(7), time(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。