Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 safety │ MT-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/ に書かれている。