名前
sigsuspend - シグナルを待つ
書式
#include <signal.h>
int sigsuspend(const sigset_t *mask);
説明
sigsuspend() は、呼び出し元プロセスのシグナルマスクを mask で指定されたマスクに一時的に置き換え、 シグナルハンドラの起動もしくはプロセスの終了がアクションとして 設定されたシグナルが配送されるまで、そのプロセスを停止する。
シグナルがプロセスを終了させるものの場合、 sigsuspend() は返らない。シグナルが捕捉された場合、 シグナルハンドラの処理が終わった後に sigsuspend() は返り、シグナルマスクは sigsuspend() が呼び出される前の状態に復元される。
SIGKILL と SIGSTOP を禁止 (block) することはできない; これらのシグナルを mask に指定しても、プロセスのシグナルマスクは影響を受けない。
返り値
sigsuspend() は常に -1 を返し、通常は EINTR エラーが発生する。
エラー
EFAULT | mask が指しているメモリが、プロセスのアドレス空間の有効な部分ではない。 |
EINTR | システムコールはシグナルにより割り込まれた。 |
準拠
POSIX.1-2001.
注意
sigsuspend() は、通常、クリティカル・コード・セクション (critical code section) の 実行中にシグナルが配送されるのを防止するために、 sigprocmask(2) と組み合わせて使用される。 まず最初に、呼び出し元は sigprocmask(2) を使ってシグナルを禁止する。 クリティカル・コードが完了すると、呼び出し元は sigprocmask(2) が (oldset 引き数で) 返すシグナルマスクを指定して sigsuspend() を呼び出すことで、クリティカル・コード実行中に発生した シグナルを待つことができる。
シグナル集合の操作に関する詳細は sigsetops(3) を参照のこと。
関連項目
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), sigwaitinfo(2), sigsetops(3), signal(7)