SIGINFO(3) |
FreeBSD Library Functions Manual |
SIGINFO(3) |
名称
siginfo —
シグナル生成情報
解説
プロセスは、シグナルをキャッチしたときのシグナル情報を要求します。情報は、なぜシステムがそのシグナルを生成したかを示しています。シグナルハンドラのシグナル情報を要求するために、ユーザは、
sigaction(2) が呼び出される前に
sa_flags に
SA_SIGINFO を設定することができます、そうしないなら、ユーザは、シグナル情報を得るために
sigwaitinfo(2) と
sigtimedwait(2) を使用することができます。どちらの場合でも、システムは、次の情報を含んでいるタイプ
siginfo_t の構造体で情報を返します:
タイプ |
メンバ |
説明 |
int |
si_signo |
シグナル番号 |
int |
si_errno |
エラー番号 |
int |
si_code |
シグナルコード |
union sigval |
si_value |
シグナル値 |
pid_t |
si_pid |
送信プロセス ID |
uid_t |
si_uid |
送信プロセスの実ユーザ ID |
void |
*si_addr |
フォルト命令のアドレス |
int |
si_status |
終了値またはシグナル |
long |
si_band |
SIGPOLL のためのバンドイベント |
int |
si_trapno |
マシントラップコード |
int |
si_timerid |
POSIX タイマ ID |
int |
si_overrun |
POSIX タイマオーバランカウント |
int |
si_mqd |
POSIX メッセージキュー ID |
si_signo メンバは、シグナル番号を含みます。
si_errno メンバは、ファイル < errno.h> で定義されたエラー番号を含みます。
si_code メンバは、シグナルの原因について説明するコードを含みます。次のテーブルの Code カラムで指定されたマクロは、シグナルが生成された、シグナル特有またはシグナル特有でない理由である si_code の値として使用するために定義されます:
シグナル |
コード |
理由 |
SIGILL |
ILL_ILLOPC |
不正なオペコード |
|
ILL_ILLOPN |
不正オペランド |
|
ILL_ILLADR |
不正アドレッシングモード |
|
ILL_ILLTRP |
不正トラップ |
|
ILL_PRVOPC |
不正特権オペコード |
|
ILL_PRVREG |
不正特権レジスタ |
|
ILL_COPROC |
コプロセッサエラー |
|
ILL_BADSTK |
内部スタックエラー |
SIGFPE |
FPE_INTDIV |
整数のゼロ除算 |
|
FPE_INTOVF |
整数オーバフロー |
|
FPE_FLTDIV |
浮動小数点ゼロ除算 |
|
FPE_FLTOVF |
浮動小数点オーバフロー |
|
FPE_FLTUND |
浮動小数点アンダフロー |
|
FPE_FLTRES |
浮動小数点の不正確な結果 |
|
FPE_FLTINV |
無効浮動小数点演算 |
|
FPE_FLTSUB |
範囲外の添字 |
SIGSEGV |
SEGV_MAPERR |
オブジェクトにマップされていないアドレス |
|
SEGV_ACCERR |
マップされているオブジェクトの無効パーミッション |
SIGBUS |
BUS_ADRALN |
無効アドレス整列 |
|
BUS_ADRERR |
実在しない物理アドレス |
|
BUS_OBJERR |
オブジェクト特有のハードウェアエラー |
SIGTRAP |
TRAP_BRKPT |
プロセスブレークポイント |
|
TRAP_TRACE |
プロセストレーストラップ |
|
TRAP_DTRACE |
DTrace は、トラップ引き起こしました |
SIGCHLD |
CLD_EXITED |
子供は終了した |
|
CLD_KILLED |
子供は異常終了、コアファイルを作成しませんでした |
|
CLD_DUMPED |
子供は異常終了、コアファイルを作成しました |
|
CLD_TRAPPED |
トレースされた子供はトラップしました |
|
CLD_STOPPED |
子供は停止しました |
|
CLD_CONTINUED |
停止している子供は継続されました |
SIGPOLL |
POLL_IN |
データ入力は利用可能 |
|
POLL_OUT |
出力バッファは利用可能 |
|
POLL_MSG |
入力メッセージは利用可能 |
|
POLL_ERR |
I/O エラー |
|
POLL_PRI |
高い優先度入力は利用可能 |
|
POLL_HUP |
デバイスは切断しました |
Any |
SI_NOINFO |
si_signo メンバのみが重要です;他のすべてのメンバの値は特定されません |
|
SI_USER |
kill(2) によるシグナルを送信 |
|
SI_QUEUE |
sigqueue(2) によるシグナルを送信 |
|
SI_TIMER |
timer_settime(2) で設定されたタイマの満了で生成されるシグナル |
|
SI_ASYNCIO |
非同期 I/O 要求の完了で生成されるシグナル |
|
SI_MESGQ |
空のメッセージキューでメッセージの到着で生成されたシグナル |
|
SI_KERNEL |
カーネルの様々な部分によって生成されたシグナル |
|
SI_LWP |
pthread_kill(3) によって送られたシグナル |
さらに、次のシグナル特有の情報が利用可能です:
シグナル |
メンバ |
値 |
SIGILL |
si_addr |
|
|
si_trapno |
マシン依存のトラップコード |
SIGFPE |
si_addr |
フォルト命令のアドレス |
|
si_trapno |
マシン依存のトラップコード |
SIGSEGV |
si_addr |
メモリ参照フォルトのアドレス |
|
si_trapno |
マシン依存のトラップコード |
SIGBUS |
si_addr |
フォルト命令のアドレス |
|
si_trapno |
マシン依存のトラップコード |
SIGCHLD |
si_pid |
子プロセス ID |
|
si_status |
終了値またはシグナル; si_code が CLD_EXITED と等しいなら子プロセスの終了値と等しく、そうでなければ、子プロセスの状態を変更するシグナルと等しい。 |
|
si_uid |
シグナルを送信したプロセスの実ユーザ ID |
SIGPOLL |
si_band |
POLL_IN, POLL_OUT または POLL_MSG のためのバンドイベント |
最終的に、次のコード特有の情報が利用可能です:
コード |
メンバ |
値 |
SI_USER |
si_pid |
シグナルを送ったプロセス ID |
|
si_uid |
シグナルを送ったプロセスの実ユーザ ID |
SI_QUEUE |
si_value |
sigqueue(2) システムコールに渡された値 |
|
si_pid |
シグナルを送信したプロセス ID |
|
si_uid |
シグナルを送信したプロセスの実ユーザ ID |
SI_TIMER |
si_value |
timer_create(2) システムコールに渡された値 |
|
si_timerid |
timer_create(2) システムコールで返されたタイマ ID |
|
si_overrun |
シグナルに対応するタイマオーバランカウント |
|
si_errno |
タイマオーバランが{ DELAYTIMER_MAX}になるなら、 < errno.h> 定義されたエラーコードが設定されます |
SI_ASYNCIO |
si_value |
aio システムコールに渡された値 |
SI_MESGQ |
si_value |
mq_notify(2) システムコールに渡された値 |
|
si_mqd |
シグナルを生成したメッセージキューの ID |
SI_LWP |
si_pid |
シグナルを送ったプロセス ID |
|
si_uid |
シグナルを送ったプロセスの実ユーザ ID |
注
現在、カーネルは
SIGPOLL シグナルを決して生成しません。
SIGCHLD シグナルは、プロセスが状態を変更するか、終了するとき、キューに入れられます。また、 POSIX Realtime Extensions (リアルタイム拡張) は、aio, タイマとシグナルをキューに入れるメッセージキューに似ています。コード
SI_USER,
SI_KERNEL または
SI_LWP を備えたシグナルは、十分なリソースがあるなら、単にキューに入れられます。そうでなければ、
SI_NOINFO の結果となります。いくつかのハードウェアアーキテクチャでは、
si_addr の正確な値は利用可能でないかもしれません。
規格
siginfo_t タイプは、 IEEE Std 1003.1-2004 (“POSIX.1”) に適合しています。
歴史
POSIX シグナル情報の完全なサポートは、
FreeBSD 7.0 ではじめて登場しました。
FreeBSD 8.1 の時点でコード
SI_USER と
SI_KERNEL を生成することができます。
FreeBSD 9.0 の時点でコード
SI_LWP を生成することができます。
作者
このマニュアルページは、
David Xu <davidxu@FreeBSD.org>によって書かれました。