отслеживание недолговечного приложения - PullRequest
4 голосов
/ 18 февраля 2012

Я написал скрипт DTrace, который измеряет время, проведенное внутри функции в моей C-программе. Сама программа запускается, выводит некоторые данные и затем завершается.

Проблема в том, что для меня заканчивается быстрый способ получить идентификатор процесса и запустить DTrace.

На данный момент в моем коде есть оператор sleep (), который дает мне достаточно времени для запуска DTrace. Необходимость изменить свой код, чтобы получить информацию о нем, несколько противоречит цели Dtrace ... правильно.

По сути, я хочу заставить DTrace подождать, пока не появится идентификатор процесса, а затем запустить мой скрипт против него.

1 Ответ

5 голосов
/ 02 марта 2012

Предположительно, вы используете провайдер pid, и в этом случае нет возможности включить эти пробники до того, как процесс будет создан. Обычным решением этого является вызов программы из самой dtrace с опцией "-c".

Если по какой-то причине вы не можете этого сделать (т.е. ваш процесс должен быть запущен в какой-то среде, настроенной другим процессом), вы можете попробовать более сложный подход: используйте proc ::: start или proc :: : exec-success для отслеживания фактического запуска вашей программы, используйте действие stop (), чтобы остановить программу в этот момент, а затем используйте system () для запуска другого вызова DTrace, использующего провайдер pid, а затем «уберите» запрограммируйте снова.

...