Linux Labs

Система изнутри: ресурсы, ядро, процессы / Ступень 7 из 12

strace и /proc: что делает процесс

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 8 · теория · 4 мин

Промахи и фильтр

Не каждый -1 в трассировке — поломка. Ключи strace оставляют на экране только нужные вызовы.

В полной трассировке nightsync 35 файловых вызовов кончаются ENOENT. Почти все — до первой строки самой программы: загрузчик и python3 ищут библиотеки, настройки и модули по нескольким путям и берут первый найденный. Такой промах — обычная работа. Важна ошибка, после которой программа выходит.

Ключ -e trace= оставляет вызовы одного вида, -o пишет трассировку в файл вместо экрана:

bash
strace -e trace=openat nightsync 2>&1 | tail -n 3  # только openat
strace -o trace.txt nightsync                       # всё — в файл

Без ключа -f strace следит только за процессом, который запустил. Служба часто стартует со скрипта-обёртки, а настоящая программа работает его дочерним процессом: её вызовы strace покажет только с -f.

Проверь себя 1 вопрос

Администратор создал /etc/nightsync/sync.conf, но с правами 600 и владельцем root. Чем теперь кончится строка openat этого файла в strace, запущенном от student?

  • Файл теперь есть, поэтому ENOENT не будет. Читать его может только root, и ядро ответит student отказом в правах.

  • strace следит за процессом, а не за файлом: вызовы программы, запущенной тобой, видны без sudo, и отказ ядра — в результате вызова.

  • Для чтения нужно право r, а у файла 600 root оно есть только у владельца: ls -l покажет -rw-------.

Файл есть, но читать его student не может: ядро отвечает на openat отказом EACCES. Так strace различает «нет файла» и «нет прав», даже когда программа о них молчит.

Главное в шаге

  • Отказ системного вызова — -1 и имя ошибки: ENOENT — файла нет, EACCES — нет прав.
  • Причина молчаливого отказа — последний вызов с -1 перед выходом; промахи в начале — поиск по путям.
  • -e trace= оставляет вызовы одного вида, -f добавляет дочерние процессы, -o пишет в файл.
Ubuntu 24.04
Загрузка…