【发布时间】:2012-06-23 03:05:38
【问题描述】:
我有一台 2009 年中期的 MacBook Pro 和一台新的 2012 MacBook Pro,我正在学习 DTrace(一个非常棒的工具)。当我在新的 2012 MBP 上计算聚合时,聚合不会打印出来。
sudo dtrace -n 'syscall:::entry { @[execname] = count() }'
在我的 2009 年中期 MBP 中,它显示如下:
usbmuxd 1
GrowlHelperApp 2
imklaunchagent 2
installd 2
stackshot 2
...
2012 MBP 没有显示任何内容。
我在 BEING 和 END 探针中添加了一个 printf,以查看 END 探针是否会像这样触发:
BEGIN
{
printf("Hi!");
}
syscall:::entry
{
@[execname] = count();
}
END
{
printf("Bye!")
}
在 2009 年中期的 MBP 上,两个探头都发射并打印,而在 2012 MBP 上,只有 BEGIN 探头发射。 END 从未触发过。
两个 MBP 都运行 Lion 10.7.3。我不确定下一步该尝试什么。现在想到的唯一区别是我没有在 2012 MBP 上安装开发人员命令行工具。但这对我来说没有意义,而且是在黑暗中开枪。
任何帮助或想法将不胜感激。谢谢。
=============[已启用的 Root 帐户]=====================
所以我启用了 root 帐户并重新运行了命令
sudo dtrace -n 'syscall:::entry { @[execname] = count() }'
没有成功,但如果我成功了
su
dtrace -n 'syscall:::entry { @[execname] = count() }'
有效!
=============[kill -s INT]============================ =
我做了更多的实验。如果我跑:
sudo kill -s INT [pid of dtrace]
一切正常并显示输出。
如果我跑:
sudo kill -s INT [pid of sudo running dtrace]
这也有效!
但如果我在终端中使用 control-c,它不会 显示输出。
control-c 和 kill -s INT 有什么区别?
【问题讨论】:
-
在您的系统上尝试to enable "root"。
标签: macos sudo dtrace control-c