К основному контенту

Как посмотреть системные вызовы в Linux, определить причину отказа в запуске приложения и что такое strace

Чтобы посмотреть системные вызовы, которые осуществляет приложение в Linux, можно использовать утилиту strace. Она позволяет отслеживать системные вызовы и сигналы, которые получает процесс.

Как использовать strace:

  1. Запуск процесса с strace

    strace -f -o trace.log ./my_application
    • -f — отслеживать дочерние процессы.
    • -o trace.log — записать вывод в файл для последующего анализа.
  2. Отладка уже запущенного процесса
    Если приложение зависло или не работает как ожидается, можно подключиться к нему по PID:

    strace -p <PID>
  3. Фильтрация системных вызовов
    Если интересно только открытие файлов, можно использовать:

    strace -e open,openat,read,write ./my_application

Как определить, почему приложение не запускается

  1. Посмотреть ошибки в strace

    • Ошибки ENOENT указывают на отсутствие файла или библиотеки.
    • Ошибки EACCES говорят о проблемах с правами доступа.
    • Ошибки ENOMEM означают нехватку памяти.
    • segfault или SIGSEGV указывает на ошибку в коде приложения.
  2. Проверить зависимости с помощью ldd

    ldd ./my_application

    Если какие-то библиотеки отсутствуют, приложение может не запуститься.

  3. Проверить SELinux/AppArmor
    Если в системе включен SELinux, он может блокировать запуск приложения:

    dmesg | grep -i denied
  4. Проверить права и исполнение

    ls -l ./my_application

    Если у файла нет флага выполнения (x), его нужно добавить:

    chmod +x ./my_application
  5. Проверить ошибки загрузки с journalctl

    journalctl -xe
  6. Попробовать запустить с gdb (если strace не помогает)

    gdb --args ./my_application (gdb) run

Практический пример

Допустим, у нас есть исполняемый файл my_app, который не запускается.

1. Используем strace

Запускаем программу через strace и сохраняем лог:

strace -f -o trace.log ./my_app

Если программа сразу падает с ошибкой, посмотрим последние строки в trace.log:

tail -20 trace.log

Пример вывода:

openat(AT_FDCWD, "/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) write(2, "error while loading shared libraries: libm.so.6: cannot open shared object file: No such file or directory\n", 120) = 120

Здесь видно, что программа не может найти libm.so.6.


2. Проверяем зависимости с ldd

ldd ./my_app

Вывод:

libm.so.6 => not found libc.so.6 => /lib64/libc.so.6 (0x00007f8b3a3f1000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8b3a3ce000)

Видим, что libm.so.6 не найдена.


3. Ищем библиотеку в системе

find /lib /usr/lib /lib64 /usr/lib64 -name "libm.so*"

Если библиотека есть, но не находится динамическим линкером, добавим путь вручную:

export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH

Если библиотеки вообще нет, установим её:

sudo apt-get install libc6 # или для CentOS/RHEL sudo yum install glibc

4. Пробуем снова

Запускаем my_app заново:

./my_app

Если проблема была в библиотеке, теперь программа должна запуститься.

Если всё равно не работает — снова анализируем strace и ldd.

Комментарии

Популярные сообщения из этого блога

Debian 10: Подключение и Настройка Архивных Репозиториев для Работы

Актуальные рабочие репозитории для Debian 10: подключение и исправление проблем Debian 10 "Buster" официально устарел, и его репозитории были перемещены в архив. Это означает, что стандартные зеркала больше не содержат пакеты для данной версии. Однако можно продолжать использовать Debian 10, подключив архивные репозитории. В этой статье рассмотрим, как правильно настроить систему и устранить возможные проблемы. 1. Подключение архивных репозиториев для Debian 10 Шаг 1: Редактирование файла sources.list Для работы с пакетами необходимо обновить список репозиториев в файле /etc/apt/sources.list . Откройте его с правами суперпользователя: sudo nano /etc/apt/sources.list Замените его содержимое на следующее: deb http://archive.debian.org/debian buster main contrib non-free deb http://archive.debian.org/debian-security buster/updates main contrib non-free deb http://archive.debian.org/debian buster-updates main contrib non-free Сохраните изменения ( Ctrl + X , затем Y и Enter ). Ш...

Настройка и подключение IPSec в Windows

Настройка IPSec на Windows включает в себя создание правил безопасности и фильтров для защиты сетевого трафика. Ниже — пошаговое руководство. Включение службы IPSec Перед настройкой убедитесь, что служба IPSec Policy Agent запущена: Нажмите Win + R , введите services.msc и нажмите Enter . Найдите IPsec Policy Agent . Если она не работает, нажмите ПКМ → Свойства . Установите Тип запуска: Автоматически , затем нажмите Запустить . Настройка политики IPSec через «Локальную политику безопасности» Нажмите Win + R , введите secpol.msc , нажмите Enter . Перейдите в Политики IP-безопасности в локальном компьютере . В правом окне нажмите Создать политику IP-безопасности → Далее . Укажите имя политики (например, "IPSec VPN"), снимите флажок Активировать правило по умолчанию , нажмите Далее . Нажмите Добавить , чтобы создать правило. Транспортный или туннельный режим : Если IPSec для защищенной локальной сети – выберите Транспортный режим . Если IPSec для VPN – выберите Туннельн...

Полный обзор AWX для Ansible: возможности, назначение и логика работы

AWX — это веб-интерфейс, REST API и механизм управления для Ansible, который делает автоматизацию удобнее и управляемее. Он является основой для Red Hat Ansible Automation Platform (AAP) и предоставляет мощные возможности для администрирования инфраструктуры. 🔹 Возможности AWX Управление инвентарем Подключение к динамическим инвентарям (например, AWS, GCP, VMware). Группировка хостов и управление ими через GUI. Импорт инвентаря из статических файлов (INI, YAML, JSON). Планирование и выполнение заданий Запуск плейбуков по расписанию. Возможность ручного запуска через интерфейс. Параллельное выполнение нескольких задач. Контроль доступа и безопасность Ролевая модель управления (RBAC). Поддержка интеграции с LDAP, SAML, OAuth. Гибкие политики доступа к ресурсам. Логирование и мониторинг Детальный журнал выполнения задач. Интеграция с Grafana, Prometheus, ELK. Уведомления (Slack, Email, Webhook). CI/CD и интеграция с SCM Авто...