linux-labs

Вики / Процессы

strace (трейс системных вызовов)

Что процесс делает на самом деле — файлы, сеть, ошибки системных вызовов.

strace показывает системные вызовы процесса (открытие файлов, сеть, чтение/запись) и их результат. Незаменим, когда «непонятно, почему не работает»: видно, какой файл не найден, куда не достучался, где Permission denied. (Для вызовов библиотек — ltrace.)

strace command args               # трейс запуска команды
sudo strace -p 1234               # подключиться к работающему процессу
Ключ Значение
-f следовать за дочерними процессами/потоками
-p PID подключиться к работающему процессу
-e trace=... фильтр: file, network, openat,read, %memory
-c сводка-профиль (какие вызовы, сколько времени)
-T время на каждый вызов
-t / -tt таймстамп каждой строки
-y показывать пути/адреса вместо номеров fd
-s N длина показываемых строк (по умолч. 32 — увеличь)
-o FILE вывод в файл
strace -f -e trace=file cmd       # файловые операции с дочерними
strace -e trace=network -f cmd    # сетевые вызовы (connect/sendto)
strace -y -e trace=read,write -p PID  # что читает/пишет процесс, с путями fd
strace -T -e trace=openat cmd     # время каждого openat
strace -c cmd                     # ПРОФИЛЬ: топ вызовов по времени/числу
strace -s 200 -e trace=write -p PID   # увидеть длинные строки вывода
strace -tt -o trace.log -f cmd    # в файл, с таймстампами, с потомками

Программа падает/висит без понятной причины

strace -f program → смотри последние вызовы перед зависанием/выходом. Часто видно openat(...«файл») = -1 ENOENT (нет файла) или connect(...) = ... ETIMEDOUT.

«Permission denied», но непонятно на чём

strace -f -e trace=file program 2>&1 | grep EACCES — покажет, к какому файлу нет доступа (см. chmod-chown, permissions).

Куда лезет процесс по сети

strace -f -e trace=network program — увидишь connect() к адресам/портам (дополни tcpdump для самих пакетов).

Процесс завис — на чём именно

sudo strace -p PID — последний вызов и есть «место зависания» (часто read/futex/ poll). Состояние D — ждёт I/O (см. processes).

strace: Operation not permitted

Нужен root для чужого процесса (sudo), либо ограничение yama (/proc/sys/kernel/yama/ptrace_scope = 1).

strace -f cmd                     # трейс с дочерними
sudo strace -p PID                # к работающему процессу
strace -f -e trace=file cmd       # только файлы (ENOENT/EACCES)
strace -e trace=network cmd       # сеть
strace -c cmd                     # профиль вызовов
strace -y -s200 -p PID            # с путями fd и длинными строками

См. также