SIGPROCMASK(2) | Linux Programmer's Manual | SIGPROCMASK(2) |
sigprocmask - 禁止するシグナルの確認と変更
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
glibc
向けの機能検査マクロの要件
(feature_test_macros(7) 参照):
sigprocmask(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
sigprocmask() を使うと、呼び出したスレッドのシグナルマスクの取得/変更ができる。 シグナルマスクは、呼び出し元に対して現在配送が禁止されているシグナルの 集合のことである (詳細については signal(7) も参照のこと)。
このコールの動作は how の値によって決まる:
oldset が NULL でなければ、シグナルマスクの今までの値を oldset に格納する。
set が NULL であれば、シグナルマスクは変更されない (すなわち、 how は無視される)。 set の値にかかわらず、現在のシグナルマスクの値は oldset に入れて返される (但し、 oldset が NULL でない場合)。
マルチスレッドのプロセスで sigprocmask() を使用した場合の動作は規定されていない。 pthread_sigmask(3) を参照のこと。
sigprocmask() は成功した場合 0 を返す。 エラーの場合、 -1 を返し、 errno にエラーの原因を示す値を設定する。
POSIX.1-2001.
SIGKILL や SIGSTOP を禁止することはできない。 禁止しようとしても黙って無視される。
プロセス内の各スレッドはそれぞれ専用のシグナルマスクを持つ。
fork(2) 経由で作成された子プロセスは親プロセスのシグナルマスクのコピーを継承する。 execve(2) の前後でシグナルマスクは保持される。
シグナル SIGBUS, SIGFPE, SIGILL, SIGSEGV が禁止されている間に生成された場合で、 そのシグナルが kill(2), sigqueue(3), raise(3) によって生成されたものでないときには、 その後の動作は未定義である。
シグナル集合の操作に関する詳細は sigsetops(3) を参照のこと。
kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2), pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部である。 プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2013-04-19 | Linux |