SIGSUSPEND
Section: Linux Programmer's Manual (2)
Updated: 2019-03-06
Index
JM Home Page
roff page
 
名前
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()
が呼び出される前の状態に復元される。
SIGKILL と SIGSTOP を禁止 (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/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - 準拠
 - 
 - 注意
 - 
- C ライブラリとカーネルの違い
 - 
 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:43 GMT, November 24, 2023