Ответ
В 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).
- Отладки (поиск утечек ресурсов, "зомби"-процессов).
- Написания скриптов, которые корректно запускают и завершают дочерние процессы.