2012-06-23 91 views
5

我有一個2009年中期的MacBook Pro和一個新的2012年MacBook Pro,我正在學習DTrace(一個非常了不起的工具)。當我計算新的2012 MBP的聚合時,聚合不會打印出來。DTrace END probe永遠不會觸發

sudo dtrace -n 'syscall:::entry { @[execname] = count() }' 

在我2009年中期MBP,它顯示是這樣的:

usbmuxd               1 
    GrowlHelperApp             2 
    imklaunchagent             2 
    installd               2 
    stackshot               2 
    ... 

2012年的MBP沒有顯示任何東西。

我加入一個幸福和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有什麼區別?

+1

嘗試在系統上啓用「root」](http://support.apple.com/kb/ht1528)。 – Kentzo

回答

5

我注意到,在Linux上也是如此。

如果dtrace由sudo產生,Ctrl-C不起作用。

如果您使用sudo -i來獲取root shell,然後調用dtrace,它就會起作用。

+0

我仍然不確定兩臺Mac之間有什麼變化,但這確實起作用,比試圖殺死這個進程更容易。我也試過sudo -s,它工作。感謝 – SargeATM

+0

可能是sudo的版本。我很好奇你的舊版macosx中的sudo版本是什麼? – ithkuil

+0

這幫助我在OSX 10.8上。謝謝! –

相關問題