KTRACE(1)

名称
ktrace - カーネルプロセスのトレースを行う

書式
ktrace [-aCcdi] [-f trfile] [-g pgrp | -p pid] [-t trstr] ktrace [-adi] [-f trfile] [-t trstr] command

解説
ktrace は、指定したプロセスのカーネルのトレースログを とります。カーネルトレース情報はファイル ktrace.out に記録されます。 トレースされるカーネル動作には、 システムコール、namei 変換、シグナル処理、 I/O 処理が含まれます。

いったんプロセスのトレースを行うようにすると、トレースデータは プロセスが終了するか、トレースポイントがクリアされるまで記録され続けます。 トレースしたプロセスは膨大な量のログを急速に作るため、ユーザはプロセスの トレースを行う前にトレースを取り消す方法を覚えておくことを強くお勧めします。 ユーザが実行している全てのプロセスのトレース動作を取り消すには、 以下のコマンドで十分です。このコマンドが root 権限で実行された場合には、 全てのプロセスに対してトレースの取消しが行われます。

    $ ktrace -C

トレースファイルはそのままでは読めませんので、 kdump(1) を使って解析してください。

オプションとしては、以下のものがあります。

-a  既存のトレースファイルを再構築しないで、後ろに追加していきます。

-C  ユーザが実行している全てのプロセスのトレース動作をオフにします。 root が実行した場合はシステムのすべてのプロセスのトレースがオフになります。

-c  指定したファイルやプロセスに対するトレースポイントをクリアします。

-d  指定したプロセスの現在の子プロセスすべてに対してトレースを行います。

-f trfile
    トレース記録を ktrace.out のかわりに trfile に記録します。

-g pgid
    プロセスグループ内の全てのプロセスのトレースをオン (オフ) にします( -g フラグは 1 つしか指定できません)。

-i  指定したプロセスが今後生成するすべての子プロセスに対し、トレースフラグを 継承させます。

-p pid
    指定したプロセス ID のトレースを行います (または 取り消します) ( -p フラグは 1 つしか指定できません)。

-t trstr
    この文字列引数は、カーネルトレースポイントの 1 つを 1 文字で表現しています。 以下の表は、文字とトレースポイントの対応関係を表しています。

    c   システムコールのトレース
    n   namei 変換のトレース
    i   I/O のトレース
    s   シグナル処理のトレース
    u   ユーザでのトレース
    w   コンテキストスイッチ
    +   トレースポイントのデフォルト集合、すなわち c, n, i, s, u をトレースします。

command
    指定したトレースフラグで command を実行します。

-p, -g, command は相互に排他的です。同時に利用することはできません。

使用例
# プロセス ID 34 のプロセスすべてのカーネル動作のトレースを行います。
    $ ktrace -p 34

# プロセスグループ ID 15 のすべてのプロセスのカーネル動作のトレースを行い、 現在および未来の子プロセスすべてにトレースフラグを渡します。
    $ ktrace -idg 15

# プロセス ID 65 のプロセスのすべてのトレースを取り消します。
    $ ktrace -cp 65

# プロセス ID 70 のプロセスとそのすべての子プロセスの、シグナルに関する トレースを取り消します。
    $ ktrace -t s -cdp 70

# プロセス ID 67 のプロセスの I/O に関するトレースを有効にします。
    $ ktrace -ti -p 67

# コマンド "w" を実行し、システムコールのみのトレースを行います。
    $ ktrace -tc w

# "tracedata" ファイルに対するすべてのトレースを取り消します。
    $ ktrace -c -f tracedata

# ユーザが所有しているすべてのプロセスのトレースを取り消します。
    $ ktrace -C

関連項目
kdump(1)

バグ
trfile が普通のファイルの場合だけ働きます。

歴史
ktrace コマンドは 4.4BSD から実装されました。