SIGQUEUE

Section: Linux Programmer's Manual (3)
Updated: 2017-09-15
Index JM Home Page roff page
 

名前

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

バージョン

sigqueue() とその裏で使われる rt_sigqueueinfo() システムコールは Linux 2.2 で初めて登場した。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース属性
sigqueue() Thread safetyMT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008.  

注意

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

C ライブラリとカーネルの違い

Linux では、 sigqueue() は 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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
エラー
バージョン
属性
準拠
注意
C ライブラリとカーネルの違い
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 11:55:25 GMT, May 01, 2021