Что такое процессы в Linux? Что такое init/systemd, PID, PPID, демоны?
Процесс — экземпляр работающей программы. Каждый процесс имеет PID (Process ID), PPID (Parent Process ID), собственное адресное пространство, набор файловых дескрипторов, владельца (UID) и группу (GID).
Аналогия из жизни: процесс — это сотрудник в офисе. У каждого есть свой номер (PID), начальник (PPID), своё рабочее место (адресное пространство) и набор инструментов (файловые дескрипторы). Демон — это охранник, который работает в фоне 24/7.
Система инициализации
При загрузке ядро запускает первый процесс — init (PID=1). В Ubuntu 24.04 это systemd. Этот процесс является предком всех остальных процессов.
| Система инициализации | Описание |
|---|---|
| SysV init | Классическая система, последовательный запуск скриптов из /etc/init.d/ |
| Upstart | Разработка Canonical, параллельный запуск (использовалась в Ubuntu до 15.04) |
| systemd | Современный стандарт. Параллельный запуск, управление зависимостями, cgroups, журналирование |
Состояния процесса
| Состояние | Обозначение | Описание |
|---|---|---|
| Running | R |
Выполняется или ожидает в очереди CPU |
| Sleeping | S |
Ожидает события (ввод-вывод, сигнал) — прерываемый сон |
| Uninterruptible Sleep | D |
Ожидает завершения операции I/O — непрерываемый сон |
| Stopped | T |
Остановлен сигналом (например, Ctrl+Z) |
| Zombie | Z |
Завершён, но родитель не прочитал его код возврата |
Демоны (daemons)
Фоновые процессы, работающие без привязки к терминалу. По соглашению их имена часто заканчиваются на d: sshd, httpd, dockerd, systemd.
- Запускаются при загрузке системы
- Не имеют управляющего терминала
- Работают от имени специального пользователя (не root, если возможно)
- Записывают логи в файлы или syslog
Основные команды для работы с процессами
Команды управления процессами
# Показать дерево процессов
pstree -p
# Показать процессы текущего пользователя
ps aux
# Найти процесс по имени
ps aux | grep java
pgrep -a java
# Отправить сигнал процессу
kill PID # SIGTERM (корректное завершение)
kill -9 PID # SIGKILL (принудительное завершение)
kill -HUP PID # SIGHUP (перечитать конфигурацию)
# Завершить все процессы по имени
killall java
pkill java
# Запуск процесса в фоне
./run.sh &
# Перевод в фон / на передний план
Ctrl+Z # Остановить и перевести в фон
bg # Продолжить выполнение в фоне
fg # Вернуть на передний план
jobs # Показать фоновые задачи
На собеседовании: интервьюер хочет услышать про PID=1 (systemd), состояния процессов (особенно Zombie) и разницу SIGTERM vs SIGKILL. Частая ошибка — не упомянуть, что
kill -9не даёт процессу возможность корректно завершиться (закрыть соединения, сохранить данные), поэтому сначала всегда используютkill(SIGTERM).