SIGQUEUE
Section: Linux Programmer's Manual (2)
Updated: 2007-07-26
Index
JM Home Page
roff page
名前
sigqueue, rt_sigqueueinfo - シグナルとデータをプロセスに送る
書式
#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()
である。
rt_sigqueueinfo()
では 3 番目の引き数に違いがあり、
siginfo_t
構造体である。
siginfo_t
構造体は、シグナルを受信するプロセスのシグナルハンドラに渡されたり、
シグナル受信プロセスの
sigtimedwait(2)
システムコールから返されたりする。
glibc の
sigqueue()
ラッパー関数内部では、
この引き数
info
は以下のように初期化される。
info.si_signo = sig; // argument supplied to sigqueue()
info.si_code = SI_QUEUE;
info.si_pid = getpid();
info.si_uid = getuid();
info.si_value = val; // argument supplied to sigqueue()
関連項目
kill(2),
sigaction(2),
signal(2),
sigwait(3),
signal(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:03 GMT, November 19, 2007