我有一台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上安装开发人员命令行工具。但这对我来说毫无意义,只是在黑暗中拍摄。
任何帮助或想法,将不胜感激。谢谢。
============ [启用的根帐户] ====================
所以我启用了根帐户并重新运行了命令
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有什么区别?
最佳答案
我在Linux上也注意到了这一点。
如果sudo产生了dtrace,则Ctrl-C无效。
如果您使用sudo -i来获取根shell,然后调用dtrace,则它会起作用。
关于macos - DTrace END探针永不触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11166477/