Solaris 動的トレースガイド

インタプリタファイル

シェルや、awk(1)perl(1) などのユーティリティーと同じように、dtrace(1M) でも、実行可能なインタプリタファイルを作成できます。インタプリタファイルの先頭には、以下の形式の行が挿入されます。

#! pathname arg

pathname はインタプリタのパス、arg は単一の引数 (オプション) です。インタプリタファイルを実行すると、システムにより、指定されたインタプリタが呼び出されます。インタプリタファイル内に指定された arg (オプション) は、引数としてインタプリタに渡されます。インタプリタファイルのパスと、インタプリタファイルの実行時に指定されたその他の引数は、インタプリタ引数リストに追加されます。そのため、DTrace インタプリタファイルを作成するときは、最低限これらの引数を指定する必要があります。

#!/usr/sbin/dtrace -s

-s オプションの引数は、インタプリタファイルの実行時に、インタプリタファイルのパス名に変換されます。その後、dtrace によって、このファイルが読み取られ、コンパイル後、実行されます。これは、シェルウィンドウに次のコマンドを入力した場合と同じです。


# dtrace -s interpreter-file

以下に、dtrace インタプリタファイルの作成例と実行例を示します。次の D ソースコードを記述し、interp.d という名前のファイルに保存してください。

#!/usr/sbin/dtrace -s
BEGIN
{
	trace("hello");
	exit(0);
}

interp.d ファイルを実行可能にして、実行します。


# chmod a+rx interp.d
# ./interp.d
dtrace: script './interp.d' matched 1 probe
CPU     ID                    FUNCTION:NAME
  1      1                           :BEGIN   hello
#

ファイルの先頭には、これが指令であることを示す 2 文字 (#!) を必ず挿入してください。文字と文字の間、文字の前後には空白文字を入れないでください。D コンパイラは、インタプリタファイルを処理するとき、この行を自動的に無視します。

dtrace は、getopt(3C) を使ってコマンド行オプションを処理します。このため、複数のオプションを単一のインタプリタ引数として指定できます。たとえば、先ほどの例に -q オプションを追加して、インタプリタ指令を変更してみましょう。

#!/usr/sbin/dtrace -qs

複数のオプションを指定する場合、どのブール型オプションよりも後ろに -s オプションを指定します。そうしないと、このあとの引数 (インタプリタファイル名) が -s オプションの引数として処理されません。

インタプリタファイル内に、引数をとるオプションを複数指定する必要がある場合は、すべてのオプションと引数を単一のインタプリタ引数として指定できるとは限りません。この場合は、#pragma D option 指令構文を使ってオプションを設定します。すべての dtrace コマンド行オプションは、#pragma で設定できます (第 16 章オプションとチューニング可能パラメータを参照)。