Есть ли способ для процесса узнать, что dtrace присоединился? - PullRequest
0 голосов
/ 01 ноября 2018

Я ввел опцию среды, которая приостанавливает мой процесс при запуске, чтобы я мог присоединить dtrace (с помощью инструментов XCode) и начать профилирование. Затем я должен нажать Enter для запуска процесса. Мне интересно, есть ли способ для моего процесса узнать, что dtrace подключен, чтобы он мог сразу же начать работать, как только подключится профилировщик, вместо того, чтобы ждать ввода пользователя. Есть ли сигнал или значение памяти, которое устанавливается в процессе, когда присоединяется dtrace?

1 Ответ

0 голосов
/ 01 ноября 2018

Существует множество ситуаций, когда это полезно, поэтому 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 с после последнего измерения тактовых импульсов и начать работу.

...