Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

       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 では
       このように動作する。

       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/ に書かれている。