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