Датчик DTrace END никогда не срабатывает

У меня есть MacBook Pro середины 2009 года и новый MacBook Pro 2012 года, и я нахожусь в процессе изучения DTrace (довольно удивительный инструмент). Когда я вычисляю агрегаты на новом MBP 2012, агрегаты не распечатываются.

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

На моем MBP в середине 2009 года он показывает что-то вроде:

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

MBP 2012 не показывает ничего.

Я добавил printf в зонд BEING и END, чтобы посмотреть, будет ли зонд END срабатывать так:

BEGIN
{
    printf("Hi!");
}

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

END
{
    printf("Bye!")
}

В середине 2009 года MBP сработали и распечатались оба зонда, а на MBP 2012 года сработал только датчик BEGIN. КОНЕЦ никогда не стрелял.

Оба MBP работают под управлением Lion 10.7.3. Я не уверен, что попробовать дальше. Единственное отличие, которое приходит мне на ум, заключается в том, что я не установил инструменты командной строки разработчика на MBP 2012. Это просто не имеет смысла для меня, хотя и выстрел в темноте.

Любая помощь или идеи будут оценены. Благодарю.

============= [Включен корневой аккаунт]====================

Поэтому я включил учетную запись 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 ответ

Решение

Я заметил, что на Linux тоже.

Ctrl-C не работает, если dtrace порожден sudo.

Если вы sudo -i, чтобы получить корневую оболочку, а затем вызвать dtrace, это работает.

Другие вопросы по тегам