Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all 

名前
sigqueue - シグナルとデータをプロセスに送る
書式
#include <signal.h>
int sigqueue(pid_t pid, int sig, const union sigval value);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
sigqueue(): _POSIX_C_SOURCE >= 199309L
説明
sigqueue() は sig で指定されたシグナルを、PID が pid であるプロセスに送る。 シグナルを送るのに必要な権限
は kill(2) と同じである。 kill(2) と同様に、ヌル・シグナル (0) を使って 指定した PID のプロセスが存在す
るかをチェックすることができる。
value 引き数はシグナルと一緒に送るデータの付属アイテムを指定する。 value は (整数またはポインタの値であ
り) 以下のような型である。
union sigval {
int sival_int;
void *sival_ptr;
};
受取先のプロセスに、このシグナルに対するハンドラを (sigaction(2) に SA_SIGINFO を指定して) インストール
しておくと、 そのハンドラの第 2 引き数に渡される siginfo_t 構造体の si_value フィールドによって、このデー
タを取得できる。 さらに、この構造体の si_code フィールドは SI_QUEUE に設定される。
返り値
成功した場合、 sigqueue() は 0 を返す。 これは受け取り側プロセスの待ち行列に シグナルが正しく入れられた
ことを示す。 失敗した場合は -1 が返され、 errno がエラーを表す値に設定される。
エラー
EAGAIN 待ち行列に入れられるシグナルの最大数に達した (より詳しい情報は signal(7) を参照すること)。
EINVAL sig が不正である。
EPERM このプロセスには、受け取り側プロセスにシグナルを送る権限がない。 必要な権限については、 kill(2)
を参照すること。
ESRCH pid にマッチする PID のプロセスがない。
バージョン
このシステムコールは Linux 2.2 で初めて登場した。
準拠
POSIX.1-2001.
注意
この関数を呼び出したプロセスにこの関数がシグナルを送ったときに、 シグナルが呼び出し側スレッドにブロックさ
れず、 かつ (シグナルがブロックされなかった、または sigwait(3) を使用するのを待っていることにより) この
シグナルを扱うスレッドが何もない場合は、 この関数がリターンする前に、少なくとも そのスレッドに対してシグ
ナルが配送されていなければならない。
Linux では、この関数は rt_sigqueueinfo(2) システムコールを使って実装されている。 両者には 3 番目の引き数
に違いがあり、 rt_sigqueueinfo(2) では 3 番目の引き数は siginfo_t 構造体である。 siginfo_t 構造体は、シ
グナルを受信するプロセスのシグナルハンドラに渡されたり、 シグナル受信プロセスの sigtimedwait(2) システム
コールから返されたりする。 glibc の sigqueue() ラッパー関数内部では、 この引き数 uinfo は以下のように初
期化される。
uinfo.si_signo = sig; /* argument supplied to sigqueue() */
uinfo.si_code = SI_QUEUE;
uinfo.si_pid = getpid(); /* Process ID of sender */
uinfo.si_uid = getuid(); /* Real UID of sender */
uinfo.si_value = val; /* argument supplied to sigqueue() */
関連項目
kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクトの説明とバグ報告
に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
Linux 2012-03-25 SIGQUEUE(3)