Что такое процесс в Linux?

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

Ответ

В Linux процесс — это экземпляр выполняемой программы, которому ядро операционной системы выделяет и управляет ресурсами: памятью (адресное пространство), временем CPU, файловыми дескрипторами, сетевыми сокетами и т.д. С точки зрения DevOps, понимание процессов — основа для мониторинга, отладки и управления работающими приложениями.

Ключевые атрибуты процесса (что видит системный администратор/DevOps-инженер):

  • PID (Process ID): Уникальный числовой идентификатор.
  • PPID (Parent Process ID): PID процесса-родителя, который создал данный процесс (обычно через системный вызов fork()).
  • UID/GID: Идентификаторы пользователя и группы, от имени которых выполняется процесс (важно для прав доступа).
  • Состояние (State): Running (R), Sleeping (S), Stopped (T), Zombie (Z) и др.
  • Потребление ресурсов: Процент CPU, используемая память (RSS, VSZ).

Практическая работа с процессами в DevOps:

  1. Мониторинг и поиск:

    # Показать все процессы в детальном формате
    ps aux
    # Найти PID процесса по имени
    pgrep nginx
    # Показать дерево процессов (очень наглядно для понимания иерархии)
    pstree -p
    # Динамический мониторинг (аналог top с улучшенным выводом)
    htop
  2. Анализ ресурсов и отладка:

    # Показать открытые файлы и сокеты для процесса Nginx
    lsof -p $(pgrep nginx)
    # Посмотреть карту памяти процесса
    pmap $(pgrep python)
    # Отслеживать системные вызовы процесса (очень мощный инструмент отладки)
    strace -p $(pgrep myapp)
  3. Управление (сигналы):

    # Вежливо попросить процесс завершиться (SIGTERM) - позволяет выполнить cleanup
    kill <PID>
    # Принудительное завершение (SIGKILL) - последнее средство, процесс не может его обработать
    kill -9 <PID>
    # Перезапустить процесс (отправить SIGHUP, многие демоны перечитывают конфиг)
    kill -HUP <PID>

Особенности, важные для инфраструктуры:

  • Демоны: Это фоновые процессы, обычно запускаемые на старте системы (через systemd). Их PPID = 1 (процесс init/systemd). Пример: systemctl status sshd.
  • Контейнеры: С точки зрения ядра Linux, контейнер — это просто изолированная группа процессов (cgroups) с отдельным пространством имён (namespaces). Команды типа docker exec создают новый процесс внутри существующих namespaces контейнера.
  • Orphan и Zombie процессы:
    • Orphan: Родительский процесс завершился раньше дочернего. Такой процесс «усыновляется» процессом init (PID 1).
    • Zombie (Z): Процесс завершился, но его запись ещё остаётся в таблице процессов, потому что родитель не прочитал его статус выхода (wait()). Обычно это временное состояние. Скопление зомби-процессов может указывать на баг в приложении.