EN JA
SIGQUEUE(2)
SIGQUEUE(2) FreeBSD System Calls Manual SIGQUEUE(2)

名称

sigqueueプロセスへのシグナルをキューに入れる (リアルタイム)

ライブラリ

Standard C Library (libc, -lc)

書式

#include < signal.h>

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

解説

sigqueue() システムコールによって、 signo によって指定されたシグナルが、 value によって指定された値を pid によって指定されたプロセスに送信されます。 signo が 0 (null シグナル) であるなら、エラーチェックが実行されますが、実際にはシグナルを送信しません。 PID の正当性をチェックするために null シグナルを使用することができます。

別のプロセスへのシグナルをキューに入れるパーミッションがあるプロセスに必要な状態は、 kill(2) システムコールに対するものと同じです。 sigqueue() システムコールは、 pid 引数によって指定された単一プロセスへのシグナルをキューに入れます。

sigqueue() システムコールは、直ちに戻ります。シグナルをキューに入れるためにリソースが利用可能であったなら、シグナルは、キューに入れられ、受信プロセスへ送信されます。

pid の値によって signo が送信プロセスのための生成され、 signo が呼び出されるスレッドのためにブロックされず、他のスレッドにアンブロックされた signo がないか、 sigwait() システムコールで signo をウェートして (待って) いないなら、アンブロックされたシグナルである、 signo または少なくとも保留中 (pending) のいずれかは、 sigqueue() が戻る前に、呼び出したスレッドに配信されます。 SIGRTMIN から SIGRTMAX の範囲で任意の複数の保留中のシグナルが配信のために選択されるなら、それは最も低い番号が付けられたものです。リアルタイムと非リアルタイムのシグナル、または、複数の保留中の非リアルタイムシグナルの間の選択順序は、特定されていません。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

sigqueue() システムコールは、次の場合に失敗します:
[ EAGAIN]
シグナルをキューに入れるためのリソースが利用可能ではありません。プロセスには、受信側でまだ保留中であるか、またはシステム全体のリソースの制限が超えている{ SIGQUEUE_MAX}シグナルが既にキューに入れられています。
[ EINVAL]
signo 引数の値が、無効か、または、サポートされていないシグナル番号です。
[ EPERM]
プロセスには、シグナルを受信プロセスに送信するための適切な特権がありません。
[ ESRCH]
プロセス pid が存在していません。

規格

sigqueue() IEEE Std 1003.1-2004 (“POSIX.1”) システムコールは、 IEEE Std 1003.1-2004 (“POSIX.1”) に適合しています。

歴史

POSIX リアルタイムシグナルキューのサポートは、 FreeBSD 7.0 ではじめて登場しました。
March 10, 2012 FreeBSD