Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all ![bug](/img/bug.png)
![bug](/img/bug.png)
名前
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) 参照)。 SIGKILL と SIGSTOP を待とうとした場合、黙って無視される。 一つのプロセス内の複数のスレッドが sigwaitinfo() や sigtimedwait() で同じシグナルを待って停止した場合、 プロセス全体宛てのシグナルが処理待ちになると、複数のスレッドのうち一つだけが 実際にそのシグナルを受信する ことになる。 どのスレッドがシグナルを受信するかは決まっていない。 POSIX では sigtimedwait() の引き数 timeout の値を NULL にした場合の意味を未定義としている。 sigwaitinfo() を呼び出したのと同じ意味としてもよいことになっており、 実際 Linux ではこのように動作する。 Linux では、 sigwaitinfo() は sigtimedwait() を用いて実装されたライブラリ関数である。
関連項目
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.54 の一部 である。プロジェクトの説明とバグ報告 に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。