SIGPENDING(2)

名前
sigpending, rt_sigpending - 処理待ちのシグナルの検査

書式
#include <signal.h>

int sigpending(sigset_t *set);

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

sigpending(): _POSIX_C_SOURCE

説明
sigpending() は、呼び出し元のスレッドへの配送を待っている (pending) シグナル集合 (すなわち、禁止中に発生したシグナル) を返す。 処理待ちのシグナルのマスクが set に格納される。

返り値
sigpending() は成功した場合 0 を返す。 エラーの場合、 -1 を返し、errno にエラーの原因を示す値を設定する。

エラー

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

準拠
POSIX.1-2001, POSIX.1-2008.

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

シグナルが禁止 (ブロック) されており、かつ配送方法が "ignored" (無視) になっている場合、そのシグナルが発生した場合に処理待ちシグナルのマスクにそのシグナルは追加されない。

あるスレッドに対する処理待ちのシグナルの集合は、 そのスレッド自体への処理待ちのシグナル集合と、プロセス全体への処理待ちの シグナル集合をあわせたものである。 signal(7) 参照。

fork(2) 経由で作成された子プロセスでは、処理待ちのシグナル集合は空の集合で初期化される。 execve(2) の前後で、処理待ちのシグナル集合は保持される。

  C ライブラリとカーネルの違い
The original Linux system call was named sigpending(). However, with the addition of real-time signals in Linux 2.2, the fixed-size, 32-bit sigset_t argument supported by that system call was no longer fit for purpose. Consequently, a new system call, rt_sigpending(), 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 set. The glibc sigpending() wrapper function hides these details from us, transparently calling rt_sigpending() when the kernel provides it.

バグ
バージョン 2.2.1 以前の glibc では、 sigpending() のラッパー関数に、処理待ちのリアルタイムシグナルに関する情報が 正しく返されないというバグがある。

関連項目
kill(2), sigaction(2), signal(2), sigprocmask(2), sigsuspend(2), sigsetops(3), signal(7)

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