oracular (3) sigqueue.3.gz

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