Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos DTrace末端探测器从不点火_Macos_Sudo_Dtrace_Control C - Fatal编程技术网

Macos DTrace末端探测器从不点火

Macos DTrace末端探测器从不点火,macos,sudo,dtrace,control-c,Macos,Sudo,Dtrace,Control C,我有一台2009年年中的MacBook Pro和一台新的2012 MacBook Pro,我正在学习DTrace(一个非常神奇的工具)。当我在新的2012 MBP上计算聚合时,聚合不会打印出来 sudo dtrace -n 'syscall:::entry { @[execname] = count() }' 在我的2009年年中MBP上,它显示了如下内容: usbmuxd

我有一台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 probe中添加了printf,以查看END probe是否会像这样开火:

BEGIN
{
    printf("Hi!");
}

syscall:::entry
{
   @[execname] = count();
}

END
{
    printf("Bye!")
}
在2009年年中的MBP上,两个探测器都发射并打印,而在2012年的MBP上,只有BEGIN探测器发射。结局永远不会发生

两个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 dtrace]
sudo kill -s INT [pid of sudo running dtrace]
这也行

但是如果我在终端中使用control-c,它不会 显示输出


control-c和kill-s INT之间有什么区别?

我在linux上也注意到了这一点

如果dtrace是由sudo生成的,则Ctrl-C不起作用


如果您使用sudo-i获取一个根shell,然后调用dtrace,那么它可以工作。

在您的系统上尝试。我仍然不确定两台Mac之间发生了什么变化,但这确实有效,并且比尝试终止进程更容易。我也试过sudo-s,效果不错。感谢sudo的版本。我很好奇你旧版macosx中的sudo版本是什么?这在OSX 10.8上帮助了我。谢谢