Что такое родительский процесс в Linux?

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

Ответ

В Linux и других Unix-подобных системах родительский процесс — это процесс, который создаёт новый процесс с помощью системного вызова fork(). Созданный процесс называется дочерним. Каждый процесс (кроме самого первого — init или systemd с PID 1) имеет родителя.

Ключевые аспекты:

  • Иерархия: Процессы образуют дерево. Узнать PID родителя можно через getppid() или команду ps -o ppid= -p <PID>.
  • Наследование: Дочерний процесс наследует от родителя:
    • Открытые файловые дескрипторы.
    • Переменные окружения.
    • Текущий рабочий каталог.
    • Маску создания файлов (umask).
  • Управление жизненным циклом: Родитель может (и должен) отслеживать завершение дочернего процесса с помощью wait() или waitpid(), чтобы получить его статус выхода и избежать появления "зомби"-процессов (zombies).
  • Сиротство: Если родитель завершается раньше дочернего, дочерний процесс становится "сиротой" и автоматически переусыновляется процессом init/systemd (PID 1), который впоследствии выполнит wait() за него.

Практический пример в Bash и просмотр дерева процессов:

# Запускаем процесс в фоне (например, sleep)
$ sleep 300 &
[1] 12345  # PID дочернего процесса: 12345

# Смотрим его родителя (PPID) и дерево
$ ps -o pid,ppid,cmd -p 12345
    PID    PPID CMD
  12345   11056 sleep 300  # PPID 11056 — это PID оболочки Bash

# Просматриваем дерево процессов с помощью pstree
$ pstree -ps 12345
systemd(1)───bash(11056)───sleep(12345)
# Видно: systemd -> bash -> sleep

# Если "убить" родительскую оболочку, sleep станет дочерним systemd
$ kill 11056
$ ps -o pid,ppid,cmd -p 12345
    PID    PPID CMD
  12345       1 sleep 300  # PPID теперь 1 (systemd/init)

Важность для DevOps: Понимание иерархии процессов критично для:

  • Корректного управления сервисами (например, процесс, запущенный systemd).
  • Отладки (поиск утечек ресурсов, "зомби"-процессов).
  • Написания скриптов, которые корректно запускают и завершают дочерние процессы.