Основы траблшутинга процессов

2025-09-13T13:49:28.703934

Введение в траблшутинг процессов

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

strace

В траблшутинге часто будет помогать утилита strace, с помощью которой можно посмотреть системные вызовы (syscall) программы. Выполните strace true, чтобы увидеть как на низком уровне функционирует утилита true. Самостоятельно ответьте что делает true и false, опираясь на вывод strace.

Зачастую исследователь хочет увидеть конкретные системные вызовы (например, только запись в файловый дескриптор), и тут на помощь приходит флаг -e: выполнив strace -e read,write true мы увидим только системные вызовы read() и write().

Периодически также приходится использовать знакомый вам по курсу NASM'a gdb

Если процесс где-то падает, то попробуйте снять с него трейсы. Вероятно, там вы увидите не только падение, но и то, что ему предшествовало.

strace также может подключиться к конкретному работающему процессу, используя флаг -p

strings

При траблшутинге бинарных файлов, где у вас нет исходного кода программы, также хорошей практикой будет изучить вывод strings - найденые человекочитаемые строки в exec файле.

Например, если процесс не может выполнить запись в конкретный файл, возможно, в выводе strings окажется, что процесс предварительно зафризил (fsfreeze -f) файловую систему. Обнаружить это путем изучения собранных трейсов будет гораздо тяжелее.

lsof

Чтобы вам постоянно не приходилось самостоятельно исследовать procfs, GNU/Linux предоставляет ряд интерфейсов. Один из них - lsof. Выполнив команду lsof -p <PID> вы можете посмотреть все файловые дескрипторы (а также сокеты, пайпы, ...), которые открыл на чтение (read) процесс. Вывод lsof -p <PID> будет содержать вывод ls /proc/<PID>/fd с приятными дополнениями.

Самостоятельно изучите иные флаги lsof