Manpages

名 前

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 で 初 め て 登 場 し た 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (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() */
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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。