Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       sigsuspend, rt_sigsuspend - シグナルを待つ

書式

       #include <signal.h>

       int sigsuspend(const sigset_t *mask);

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

       sigsuspend(): _POSIX_C_SOURCE

説明

       sigsuspend()  は、呼び出し元スレッドのシグナルマスクを mask で指定されたマスクに一時的に置
       き換え、 シグナルハンドラーの起動もしくはプロセスの終了がアクションとして 設定されたシグナ
       ルが配送されるまで、そのスレッドを停止する。

       シグナルがプロセスを終了させるものの場合、  sigsuspend()  は返らない。シグナルが捕捉された
       場合、   シグナルハンドラーの処理が終わった後に   sigsuspend()    は返り、シグナルマスクは
       sigsuspend() が呼び出される前の状態に復元される。

       SIGKILLSIGSTOP を禁止 (block) することはできない; これらのシグナルを mask に指定して
       も、そのスレッドのシグナルマスクは影響を受けない。

返り値

       sigsuspend() は常に -1 を返し、 errno にエラーの原因を示す値 (通常は EINTR) を設定する。

エラー

       EFAULT mask が指しているメモリーが、プロセスのアドレス空間の有効な部分ではない。

       EINTR  システムコールはシグナルにより割り込まれた。 signal(7) を参照。

準拠

       POSIX.1-2001, POSIX.1-2008.

注意

       sigsuspend()  は、通常、クリティカルコードセクション (critical code section) の 実行中にシ
       グナルが配送されるのを防止するために、 sigprocmask(2)  と組み合わせて使用される。 まず最初
       に、呼び出し元は sigprocmask(2)  を使ってシグナルを禁止する。 クリティカルコードが完了する
       と、呼び出し元は    sigprocmask(2)   が   (oldset   引数で)   返すシグナルマスクを指定して
       sigsuspend()  を呼び出すことで、クリティカルコード実行中に発生した  シグナルを待つことがで
       きる。

       シグナル集合の操作に関する詳細は sigsetops(3)  を参照のこと。

   C ライブラリとカーネルの違い
       The  original  Linux  system  call  was named sigsuspend().  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_sigsuspend(), was added to support an enlarged sigset_t  type.   The  new  system  call
       takes  a  second  argument,  size_t  sigsetsize,  which specifies the size in bytes of the
       signal  set  in  mask.   This  argument  is  currently  required   to   have   the   value
       sizeof(sigset_t)  (or the error EINVAL results).  The glibc sigsuspend()  wrapper function
       hides these details from  us,  transparently  calling  rt_sigsuspend()   when  the  kernel
       provides it.

関連項目

       kill(2),  pause(2), sigaction(2), signal(2), sigprocmask(2), sigwaitinfo(2), sigsetops(3),
       sigwait(3), signal(7)

この文書について

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