Я пишу инструмент, который вызывает DTrace для отслеживания программы, указанной пользователем.
Если мой инструмент использует dtrace -c для запуска программы в качестве подпроцесса DTrace, я не только не могу передать никакие аргументы программе, но и программа запускается со всеми привилегиями DTrace, то есть с правами root ( нахожусь на Mac OS X). Это делает некоторые вещи, которые должны работать, и делает множество вещей, которые не должны работать, возможными.
Другое известное мне решение - это запустить программу самостоятельно, поставить ее на паузу, отправив SIGSTOP
, передать ее PID на dtrace -p
, а затем продолжить, отправив SIGCONT
. Проблема в том, что либо программа выполняется в течение нескольких секунд без отслеживания, пока DTrace собирает информацию о символах, либо, если я сплю несколько секунд, прежде чем продолжить процесс, DTrace жалуется, что objc<pid>:<class>:<method>:entry
не соответствует ни одному из зондов.
Есть ли способ, с помощью которого я могу запустить программу под учетной записью пользователя, а не под учетной записью root, но при этом DTrace может отследить ее с самого начала?