sigqueue

Autres langues

Langue: ja

Autres versions - même langue

Version: 2004-06-16 (fedora - 25/11/07)

Section: 2 (Appels système)

名前

sigqueue - シグナルとデータをプロセスに送る

書式

#include <signal.h>

int sigqueue(pid_t pid, int sig, const union sigval value);

説明

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 のプロセスがない。

準拠

POSIX.1-2001

注意

この関数を呼び出したプロセスにこの関数がシグナルを送ったときに、 シグナルが呼び出し側スレッドにブロックされず、 かつ (シグナルがブロックされなかった、または sigwait(3) を使用するのを待っていることにより) このシグナルを扱うスレッドが何もない場合は、 この関数がリターンする前に、少なくとも そのスレッドに対してシグナルが配送されていなければならない。

関連項目

kill(2), sigaction(2), signal(2), sigwait(3), signal(7)