Solaris 动态跟踪指南

消除 dtrace(1M) 干扰

如果跟踪对 write(2) 系统调用的所有调用,将会产生层叠输出。当其显示输出时,对 write() 的每次调用都会导致 dtrace(1M) 命令调用 write()。此反馈循环是一个有关 dtrace 命令如何干扰所需数据的较好示例。您可以使用一个简单的谓词来防止跟踪这些不需要的数据:

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

$pid 宏变量扩展为已启用探测器的进程的进程标识符。pid 变量包含其线程正在触发了探测器的 CPU 上运行的进程的进程标识符。因此,通过谓词 /pid != $pid/,可确保脚本不会跟踪与此脚本本身运行相关的任何事件。