У меня MacBook Pro середины 2009 года и новый MacBook Pro 2012 года, и я изучаю DTrace (довольно удивительный инструмент) . Когда я вычисляю агрегаты на новом MBP 2012, агрегаты не распечатываются.
sudo dtrace -n 'syscall:::entry { @[execname] = count() }'
На моем ПМБ середины 2009 года отображается что-то вроде:
usbmuxd 1
GrowlHelperApp 2
imklaunchagent 2
installd 2
stackshot 2
...
ПМБ 2012 ничего не показывает.
Я добавил printf в зонд BEING и END, чтобы увидеть, сработает ли вообще зонд END, например:
BEGIN
{
printf("Hi!");
}
syscall:::entry
{
@[execname] = count();
}
END
{
printf("Bye!")
}
В MBP середины 2009 года оба зонда сработали и напечатали, а на MBP 2012 сработал только зонд BEGIN. END так и не выстрелил.
Оба MBP работают под управлением Lion 10.7.3. Я не уверен, что попробовать дальше.Единственное отличие, которое сейчас приходит на ум, заключается в том, что я не устанавливал инструменты командной строки разработчика на MBP 2012 года. Это просто не имеет смысла для меня, хотя и является выстрелом в темноте.
Будем признательны за любую помощь или идеи. Спасибо.
=============[ Включена корневая учетная запись ]=====================
Итак, я включил корневую учетную запись и повторнозапустил команду
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?