PSIGNAL(9)

名称
psignal, pgsignal, gsignal - プロセスまたはプロセスグループへのシグナルの配信

書式
<sys/types.h> <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)

解説
これらの関数は 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 に関連付けられているグループ構造体を見つけ、それから引数 checkctty を 0 に設定して pgsignal() を実行します。 pgid が 0 の場合には何の行動も取りません。

関連項目
sigaction(2), tsleep(9)