5

私は 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 の違いは何ですか?

4

1 に答える 1

5

Linuxでもそれに気付きました。

dtrace が sudo によって生成された場合、Ctrl-C は機能しません。

sudo -i でルート シェルを取得してから dtrace を呼び出すと、機能します。

于 2012-07-10T03:58:07.493 に答える