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