Макро-переменные способны сильно упростить вашу жизнь при написании скриптов DTrace. Их имена начинаются со знака
$, и при чтении вашего скрипта DTrace> автоматически заменит макро-переменные их соответствующими значениями.
Полный список макро-переменных можно прочесть
здесь, а я рассмотрю в этот раз лишь одну из таких переменных:
$target.
$target указывает на PID процесса, указанного в командной строке DTrace-скрипта.
DTrace имеет две полезных опции командной строки, которые вы можете указывать не только при использовании собственно команды dtrace, но и при вызове DTrace-скриптов:
./script.d -c xterm
Эта команда укажет на то, что DTrace следует выполнить указанную после ключа -c команду, и уже потом обработать текст DTrace-скрипта в файле script.d. При этом макро-переменная
$target будет содержать PID процесса запущенной команды - xterm в нашем примере.
./script.d -p 654
Это аналогичный вариант выполнения DTrace скрипта, только вместо запуска команды мы лишь сообщаем DTrace, какой именно уже запущенный в системе процесс нас интересует.
$target и будет содержать PID указанный в командной сроке.
Использовать макро-переменную
$target можно следующим образом:
CODE:
#!/usr/sbin/dtrace -s
#pragma D option quiet
syscall:::entry, syscall:::return
/pid == $target/
{
printf("%d/%d: %s:%s\n", pid, tid, probefunc, probename);
}
Если мы запустим этот скрипт как в первом примере, то получим примерно следующий результат:
CODE:
./script.d -c xterm
26525/1: munmap:entry
26525/1: munmap:return
26525/1: mmap:entry
26525/1: mmap:return
26525/1: setcontext:entry
26525/1: setcontext:return
26525/1: getrlimit:entry
26525/1: getrlimit:return
26525/1: getpid:entry
26525/1: getpid:return
...
Чуть позже я расскажу про агрегации - ещё одну замечательную возможность сбора данных в DTrace, и тогда можно будет приводить примеры скриптов поинтереснее ;)
Defined tags for this entry:
dtrace
При исследовании пользовательских процессов, часто нас интересует какой-то конкретный процесс. Поэтому мы используем переменную $target (я о
Tracked: Feb 27, 15:26