我有一个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有什么区别?
答案 0 :(得分:5)
我在linux上也注意到了。
如果由sudo生成dtrace,则Ctrl-C不起作用。
如果你sudo -i获得一个root shell然后调用dtrace就行了。