名 前
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 が 不 正 で あ る 。
こ の プ
ロ セ ス に は 、
受 け 取 り 側 プ
ロ セ ス に シ グ
ナ ル を 送 る 権
限 が な い 。 必
要 な 権 限 に つ
い て は 、 kill(2) を
参 照 す る こ と
。 pid に マ ッ チ す る PID の プ ロ セ ス が な い 。 バ ー ジ ョ ンこ の シ ス テ ム コ ー ル は Linux 2.2 で 初 め て 登 場 し た 。 属 性マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) sigqueue() 関 数 は ス レ ッ ド セ ー フ で あ る 。 準 拠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() */ 関 連 項 目kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7) こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |