Как определить, как завершило работу приложение в Linux

«Как определить, как завершило работу приложение в Linux» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Linux статус завершения процесса определяется его кодом выхода (exit code). Основной способ — проверить значение специальной переменной $? сразу после завершения приложения.

./my_application
echo $?
  • 0 — успешное завершение.
  • Любое ненулевое значение — завершение с ошибкой. Конкретное число часто указывает на тип ошибки (например, 1 — общая ошибка, 127 — команда не найдена).

Для более глубокого анализа причины завершения (особенно аварийного, например, segfault) используются:

  1. Логи ядра (dmesg или journalctl -k) — покажут сообщения о критических ошибках (OOM killer, segmentation fault).
  2. Трассировка системных вызовов (strace) — помогает понять, на каком системном вызове программа упала.
    strace -f ./my_application 2>&1 | tail -20
  3. Логи systemd (journalctl -u <service_name>) — если приложение работает как служба.
  4. Сигналы: Код выхода >128 часто означает завершение по сигналу. $? - 128 = номер сигнала (например, 139 означает 139-128=11, сигнал SIGSEGV).