KTRACE(2) FreeBSD システムコールマニュアル KTRACE(2)
名称
ktrace − プロセスのトレース |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/param.h> int |
ktrace(const char *tracefile, int ops, int trpoints, int pid); |
解説 |
ktrace() システムコールは、1 つまたは複数のプロセスのトレースを有効または 無効にします。ユーザは自分のプロセスだけをトレースできます。スーパユーザ だけが、setuid プログラムまたは setgid プログラムをトレースできます。 tracefile 引数は、トレースに使用するファイルのパス名を指定します。ファイ ルは存在していなければならず、呼び出し側プロセスによって書込み可能な通常 ファイルである必要があります。トレースレコードはすべてファイルの末尾に追 加されるので、直前のトレースデータを切り捨てるためにはファイルの長さを 0 にする必要があります。トレース点が無効な場合 (後述の KTROP_CLEAR を参 照)、 tracefile は NULL にできます。 ops 引数は要求された ktrace 操作を指定します。定義されている操作は次のと おりです: |
KTROP_SET trpoints
で指定されたトレース点を有効にしま す。 trpoints 引数は関心のあるトレース点を指定します。定義されているトレース点 は次のとおりです: KTRFAC_SYSCALL システムコールをトレースします。 各トレースイベントは、汎用のヘッダの後にトレース点に固有の構成要素が続く 形式のレコードを出力します。汎用のヘッダは次のとおりです: struct ktr_header { |
int |
ktr_len; |
/* バッファの長さ */ |
||||
short |
ktr_type; |
/* トレースレコードのタイプ */ |
||||
pid_t |
ktr_pid; |
/* プロセス ID */ |
||||
char |
ktr_comm[MAXCOMLEN+1]; |
/* コマンド名 */ |
||||
struct |
timeval ktr_time; |
/* タイムスタンプ */ |
||||
caddr_t |
ktr_buf; |
}; ktr_len フィールドはこのヘッダに続く ktr_type データの長さを示します。 ktr_pid フィールドと ktr_comm フィールドは、レコードを生成したプロセスと コマンドを示します。 ktr_time フィールドは、レコードが生成された時刻を ( マイクロ秒単位で) 示します。 ktr_buf は、内部カーネルポインタであって有用 ではありません。 汎用ヘッダには ktr_len バイトの長さの ktr_type レコードが続きます。タイプ に固有のレコードは <sys/ktrace.h> インクルードファイル内で定義されていま す。 |
SYSCTL チューナブル
次の sysctl(8) チューナブルが ktrace() の動作に影響します: |
kern.ktrace.geniosize
トレースされた I/O 要求がトレースファイルに記録するデータ量を制限 します。 kern.ktrace.request_pool プロセスをデバッグできるかを制御する sysctl チューナブル (p_candebug(9) によって決められている) もまた ktrace() の操作に影響します。 戻り値 |
関数 ktrace() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。 |
エラー
ktrace() システムコールは次の場合に失敗します: |
[ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれていま す。 [ENAMETOOLONG] [ENOENT] [EACCES] [ELOOP] [EIO] [ENOSYS] 一時的な資源不足のために、スレッドが 1 個以上のトレースイベントを記録でき ないことがあり得ます。この状態はカーネルによって記憶され、次に成功するト レース要求において ktr_type フィールドの KTR_DROP フラグがセットされま す。 関連項目 |
歴史
ktrace() システムコールは 4.4BSD ではじめて登場しました。 FreeBSD 10.0 June 4, 1993 FreeBSD 10.0 |