我是 dtrace 的新手
当我执行代码时,
sudo dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }
我在另一个控制台中执行 cat 文件名。但控制台没有什么可显示的。
环境:
OS x 10.8.4
dtrace:Sun D 1.6.2
需要配置一些吗?如何解决?
尝试sudo bash
启动 root shell,然后不使用 sudo 直接运行 dtrace。
这是一个值得思考的例子:
root@macbook:~> sudo dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }'
dtrace: description 'syscall::read:entry ' matched 1 probe
^C
root@macbook:~> dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }'
dtrace: description 'syscall::read:entry ' matched 1 probe
^C
bash ??/<unknown (NULL v_name)>/ttys022 1
fseventsd <unknown (not a vnode)> 1
mds <unknown (not a vnode)> 1
Terminal <unknown (not a vnode)> 2
firefox <unknown (not a vnode)> 2
activitymonitor <unknown (not a vnode)> 3
Terminal ??/<unknown (NULL v_name)>/ptmx 5
Activity Monito <unknown (not a vnode)> 8
Google Chrome H <unknown (not a vnode)> 13
Google Chrome <unknown (not a vnode)> 15
Google Chrome ??/<unknown (NULL v_name)>/urandom 72
奇怪的是,使用sudo
while already root 会导致 DTrace 探测器不触发。我猜 sudo 会干扰 DTrace 权限。这对我来说是新的(显然,我只dtrace
从 Mac OS X 上的 root shell 运行开始)。我相信其他人可以更好地解释这一点。
已经迟到了,但是你可以做的而不是产生一个 root shell 是这样的。
由于您在 Ctrl-c-ing sudo 时会丢失输出缓冲区(因此是输出),因此您可以重写脚本以使用profile
提供程序转储结果。
配置文件提供程序提供与每个固定的指定时间间隔触发的基于时间的中断相关联的探测器。
dtrace -s /dev/stdin
syscall::read:entry /execname != "dtrace"/
{
@reads[execname, fds[arg0].fi_pathname] = count();
}
profile:::tick-2sec
{
printa(@read);
trunc(@read);
}
Ctr-d
我同意 Brendan 的回答,但我总是尽量避免使用持久的 root shell,因为我是一个相当草率和健忘的家伙,迟早我会使用那个 root shell,这是一个坏主意.
我希望 MacOS X 开发人员能尽快解决这个 sudo 问题。
另外我想说的是,尽管有几个人声称,sudo 确实会干扰 dtrace 行为?除了使用 ctrl-c 从生成的进程中丢失文件描述符之外,我在这方面没有遇到任何问题。