Man page - rt_sigtimedwait(2)

Packages contains this manual

Available languages:

en ja

Manual

SIGWAITINFO

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
関 連 項 目
こ の 文 書 に つ い て

名 前

sigwaitinfo, sigtimedwait, rt_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, POSIX.1-2008.

注 意

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

指 定 さ れ た ス レ ッ ド に 対 す る 処 理 待 ち の シ グ ナ ル の 集 合 は 、 そ の ス レ ッ ド 自 体 宛 て の 処 理 待 ち の シ グ ナ ル 集 合 と 、 プ ロ セ ス 全 体 宛 て の 処 理 待 ち の シ グ ナ ル 集 合 を あ わ せ た も の で あ る ( signal (7) 参 照 )。

SIGKILL SIGSTOP を 待 と う と し た 場 合 、 黙 っ て 無 視 さ れ る 。

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

sigwaitinfo () or sigtimedwait (), can’t be used to receive signals that are synchronously generated, such as the SIGSEGV signal that results from accessing an invalid memory address or the SIGFPE signal that results from an arithmetic error. Such signals can be caught only via signal handler.

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

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

Linux で は 、 sigwaitinfo () は sigtimedwait () を 用 い て 実 装 さ れ た ラ イ ブ ラ リ 関 数 で あ る 。

The glibc wrapper functions for sigwaitinfo () and sigtimedwait () silently ignore attempts to wait for the two real-time signals that are used internally by the NPTL threading implementation. See nptl (7) for details.

The original Linux system call was named sigtimedwait (). However, with the addition of real-time signals in Linux 2.2, the fixed-size, 32-bit sigset_t type supported by that system call was no longer fit for purpose. Consequently, a new system call, rt_sigtimedwait (), was added to support an enlarged sigset_t type. The new system call takes a fourth argument, size_t sigsetsize , which specifies the size in bytes of the signal set in set . This argument is currently required to have the value sizeof(sigset_t) (or the error EINVAL results). The glibc sigtimedwait () wrapper function hides these details from us, transparently calling rt_sigtimedwait () when the kernel provides it.

関 連 項 目

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 プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。