Skip to content

Трейсим процессы с помощью strace

Трейсим процессы с помощью strace

Если процесс запускаем из командной строки

strace -ss 1000 -tt -f наша_программа

где вместо наша_программа указываем приложение, запуск которого необходимо оттрейсить.

Если процесс уже запущен(к примеру это php-обработчик, запускаемый веб-сервером Apache с mod_fcgid, или php-fpm)

Ищем PID нашего процесса, к примеру так

ps auxf|grep наша_программа

затем выполняем

strace -ss 1000 -tt -f -p ${OUR_PID}
где ${OUR_PID} – PID нашего процесса.

Трейс сразу нескольких обработчиков php, когда нам лень указывать pid каждого процесса вручную

Делаем

strace -f $(pidof php | sed 's/`\[0 − 9\]\*`/\-p \1/g') -s 1000 -tt 

Если нужно сохранить выхлоп strace в файл для последующего изучения

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

Используем опцию -o имя_файла, к примеру, так

strace -ss 1000 -tt -f -p ${OUR_PID} -o /tmp/${OUR_PID}_strace

Трейсим файл с сохранением в файл и выводом на экран процесса трейса

strace -ss 1000 -tt -f -p ${OUR_PID} 2>&1|tee /tmp/${OUR_PID}_strace

Трейсим только определённые вызовы, к примеру, системного вызова stat

strace -ss 1000 -tt -f -p ${OUR_PID} -e 'stat'

Полезная информация

Ман strace

man strace
Ман системных вызовов Linux
man syscalls

В принципе этого достаточно для того, чтобы в полной мере освоить strace и хорошо ориентироваться в том, что происходит в процессе трейса изучаемого процесса, какие вызовы при этом вызваются, и за что они отвечают.