Бывает, процесс висит, жрёт CPU, но не падает. Логи молчат. Что делать? Танцы с бубном? Нет. Есть strace - утилита, которая показывает все системные вызовы процесса. В Linux любая программа постоянно общается с ядром: читает файлы, пишет в сокеты, выделяет память. strace перехватывает этот диалог и показывает его вам. ➤ Вариант 1 (Прицепиться к работающему процессу): процесс завис, но не умирает. # Прицепиться к PID 1234 strace -p 1234 # Вывод: # read(3, 0x7f8a2c000000, 4096) = -1 ETIMEDOUT (Connection timed out) # Наглядно: процесс ждёт ответа от какого-то файлового дескриптора 3 ➤ Вариант 2 (Запустить программу под strace): нужно понять, почему падает при запуске. # Запускаем и смотрим strace ./my_binary # Ищем строки с -1 (ошибка) strace ./my_binary 2>&1 | grep -1 ➤ Вариант 3 (Фильтрация по конкретным вызовам): шума много, нужно только чтение файлов. # Только open, read, write, close strace -e trace=open,read,write,close ./my_binary # Только сеть strace -e trace=network
strace - смотрим, что процесс делает на самом деле
2 дня назад2 дня назад
1 мин