Solaris 動的トレースガイド

dtrace(1M) の干渉の排除

write(2) システムコールの呼び出しをすべてトレースすると、結果が際限なく出力されます。write() の呼び出しのたびに、dtrace(1M) コマンドが出力表示のために write() を呼び出します。このフィードバックループは、dtrace コマンドの干渉によって望ましくないデータが出力される一例です。このような不要なデータのトレースを防ぐには、次の述語を使用します。

syscall::write:entry
/pid != $pid/
{
	printf("%s", stringof(copyin(arg1, arg2)));
}

$pid マクロ変数は、プローブを有効にしたプロセスのプロセス ID に展開されます。pid 変数には、プローブが起動した CPU 上でスレッドを実行していたプロセスのプロセス ID が入ります。このため、述語 /pid != $pid/ を使用すれば、このスクリプト自体の実行に関連したイベントをトレースしないようにできます。