EN JA
SIGINFO(3)
SIGINFO(3) FreeBSD Library Functions Manual SIGINFO(3)

名称

siginfoシグナル生成情報

書式

#include < signal.h>

解説

プロセスは、シグナルをキャッチしたときのシグナル情報を要求します。情報は、なぜシステムがそのシグナルを生成したかを示しています。シグナルハンドラのシグナル情報を要求するために、ユーザは、 sigaction(2) が呼び出される前に sa_flagsSA_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_codeCLD_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_USERSI_KERNEL を生成することができます。 FreeBSD 9.0 の時点でコード SI_LWP を生成することができます。

作者

このマニュアルページは、 David Xu <davidxu@FreeBSD.org>によって書かれました。
September 14, 2012 FreeBSD