PSIGNAL(9) | FreeBSD Kernel Developer's Manual | PSIGNAL(9) |
名称
psignal, pgsignal, gsignal, tdsignal — スレッド、プロセスまたはプロセスグループへシグナルを送る書式
#include < sys/types.h>#include < sys/signalvar.h>
void
psignal( struct proc *p, int signum);
void
pgsignal( struct pgrp *pgrp, int signum, int checkctty);
void
gsignal( int pgid, int signum);
void
tdsignal( struct thread *td, int signum);
解説
これらの関数は、スレッドまたは 1 つ以上のプロセスにシグナルを送ります。すべての 3 つの関数に共通な引数 signum は、範囲[1- NSIG]であるべきです。psignal() 関数は、シグナル番号 signum をプロセス構造体 p によって表されるプロセスに送ります。以下に示されたいくつかの例外とともに、ターゲットプロセスのシグナル配置は、更新され、実行可能としてマークされるので、シグナルのさらなる処理は、コンテキストスイッチの後にターゲットプロセスのコンテキストで行われます。 psignal() は、それ自体によって、コンテキストスイッチを引き起こさないことに注意してください。
次の場合に、ターゲットプロセスは、実行可能としてマークされません:
- ターゲットプロセスは、割り込み不可能でスリープ状態にされます。シグナルは、プロセスがシステムコールまたはトラップから返るときに通知されます。
- ターゲットプロセスは、現在シグナルを無視している状態にされます。
- デフォルトのアクション ( sigaction(2) を参照) を取るスリープしているプロセスに停止シグナルが送信されるなら、プロセスは、起こされずに停止させられます。
- シグナルのアクション (例えば、ブロックされるか、または無視される) にかかわらず、 SIGCONT は、停止させられているプロセスを再スタートします (またはスリープ状態に戻します)。
ターゲットプロセスがトレースされているなら、 psignal() は、あたかもターゲットプロセスが signum のためのデフォルトのアクションを取ったかのように振る舞います。これによってトレースしているプロセスにシグナルを通知することができます。
pgsignal() 関数は、シグナル番号 signum を pgrp によって記述されるプロセスグループの各メンバに送ります。 checkctty が 0 でないなら、シグナルは、制御端末がないプロセスにのみ送られます。 pgsignal() は、 pgrp によって指されるプロセスグループの構造体のフィールド pg_members
によって率いられるプロセスリストに沿って歩くことによって、そして、適切に psignal() を呼び出すことによって実装されています。 pgrp が NULL であるなら、何のアクションも取られません。
gsignal() 関数は、シグナル番号 signum をグループ ID pgid によって識別されるプロセスグループの各メンバに送ります。 gsignal() は、最初に pgid に関連付けられているグループの構造体を見つけ、次に、0 に設定された引数 checkctty を付けて pgsignal() を呼び出します。 pgid が 0 であるなら、何のアクションも取られません。
tdsignal() 関数は、シグナル番号 signum をスレッド構造体 td によって表されるスレッドに送ります。
October 8, 2011 | FreeBSD |