Gymterview
junior

Что такое процессы в 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).