Существует множество ситуаций, когда это полезно, поэтому DTrace имеет возможность запустить сам процесс, чтобы принудительно запустить трассировку, используя параметр -c
:
-c Run the specified command cmd and exit upon its completion.
If more than one -c option is present on the command line, dtrace
exits when all commands have exited, reporting the exit status for
each child process as it terminates. The process-ID of the first
command is made available to any D programs specified on the command
line or using the -s option through the $target macro variable.
Внутри скрипта D вы можете использовать $target
для ссылки на процесс, который вы начали с -c
, как в названии зонда pid$target::malloc:entry
или в условии /pid == $target/
.
В случае, если по какой-то причине это не сработает, конкретный механизм, который вы запрашиваете, сделать не так просто, поскольку DTrace в основном не допускает побочных эффектов, которые видны для отслеживаемого процесса. Проявив творческий подход, я полагаю, вместо того, чтобы ждать ввода в stdin
, вы можете проверить, сколько времени в цикле, и в сценарии DTrace вы можете использовать разрушительное действие void chill(int nanoseconds)
, чтобы приостановить вашу программу. в блоке BEGIN
на секунду или около того. Тогда ваша программа может обнаружить паузу из-за прохождения> 1 с после последнего измерения тактовых импульсов и начать работу.