スポンサーリンク

PSIGNAL(9) FreeBSD カーネル開発者マニュアル PSIGNAL(9)

名称

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

書式

#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);

解説

これらの関数は 1 つ以上のプロセスへシグナルを配信します。 3 つの関数全て に共通な引数 signum は [1-NSIG] の範囲であるべきです。

psignal() 関数はシグナル番号 signum をプロセス構造体 p によって表現される プロセスに配信します。以下に示す少しの例外がありますが、配信先プロセスシ グナル配置は更新され、実行可能としてマークされます。そのためこのシグナル の取り扱いは、コンテキストスイッチの後で配信先プロセスのコンテキスト内で 完了します。 psignal() は自分自身でコンテキストスイッチを引き起こすことは ないことに注意してください。

以下の場合には、配信先プロセスが実行可能としてマークされません。

 配信先プロセスが割り込み不可能で眠っています。そのシグナルはプロセスがシステムコールまたはトラップから戻ったときに通知されます。

配信先プロセスが現在はシグナルを無視しています。

デフォルトの行動 (sigaction(2) を参照) を取る眠っているプロセス に停止シグナルが送られた場合には、そのプロセスは起こされること なく停止させられます。

シグナルの行動 (例えば、ブロックまたは無視) にかかわらず、 SIGCONT は停止させられているプロセスを再スタートさせます (また はスリープに戻します)。

配信先プロセスがトレース中の場合には、 psignal() はまるで配信先プロセスが signum のためのデフォルトの行動を取ったかのように振舞います。これはトレー スしているプロセスにそのシグナルが通知されることを可能にします。

pgsignal() 関数はシグナル番号 signumpgrp によって記述されるプロセスグ ループの個々のメンバに配信します。 checkctty が 0 でない場合には、そのシ グナルは制御端末を持っているプロセスにのみ配信されます。 pgsignal() は pgrp によって指されるプロセスグループ構造体の pg_members フィールドによっ て指されるプロセスリストに沿って歩き、適切に psignal() を呼び出すことに よって実装されています。 pgrp が NULL の場合には何の行動も取りません。

gsignal() 関数はシグナル番号 signum をグループ ID pgid によって識別される プロセスグループの個々のメンバに配信します。 gsignal() は最初に pgid に関 連付けられているグループ構造体を見つけ、それから引数 checkctty を 0 に設 定して pgsignal() を実行します。 pgid が 0 の場合には何の行動も取りませ ん。

関連項目

sigaction(2), tsleep(9)

FreeBSD 10.0 June 22, 1996 FreeBSD 10.0

スポンサーリンク