Перейти до вмісту

Модуль 1.2: Процеси та systemd

Hands-On Lab Available
Ubuntu intermediate 35 min
Launch Lab ↗

Opens in Killercoda in a new tab

Основи системи | Складність: [MEDIUM] | Час: 30–35 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після проходження цього модуля ви зможете:

  • Керувати процесами за допомогою ps, top, kill та job control (bg, fg, nohup)
  • Створити та керувати сервісами systemd за допомогою unit-файлів
  • Діагностувати збої сервісів за допомогою systemctl status, journalctl та аналізу залежностей
  • Пояснити життєвий цикл процесу (fork, exec, wait, exit) та як утворюються процеси-сироти й процеси-зомбі

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Усе, що працює в Linux — це процес. Ваша оболонка, вебсервер, база даних, кожен контейнер — це процеси, якими керує ядро.

Розуміння процесів необхідне, тому що:

  • Контейнери — ЦЕ процеси. Контейнер — це просто процес в ізоляції.
  • Поди Kubernetes містять процеси, що працюють у контейнерах.
  • Налагодження (Debug) вимагає розуміння станів процесів та сигналів.
  • Керування ресурсами — це, по суті, керування процесами.

Коли kubectl exec зависає, коли контейнер не зупиняється, коли ваш застосунок стає «зомбі» — вам потрібно розуміти, як працюють процеси.


  • Процес із ID 1 — особливий. Це система ініціалізації (зазвичай systemd), предок УСІХ інших процесів. Якщо PID 1 вмирає, ядро впадає в паніку (kernel panic). У контейнерах ваш головний процес стає PID 1, тому правильна обробка сигналів там критично важлива.

  • Linux може мати понад 4 мільйони PID. Максимальний PID обмежений параметром /proc/sys/kernel/pid_max. Якщо вони закінчаться — жоден новий процес не зможе запуститися.

  • Процеси-«зомбі» не споживають CPU чи пам’ять. Це просто запис у таблиці процесів, який чекає, поки батьківський процес підтвердить завершення роботи дитини. Але занадто багато зомбі можуть вичерпати простір ідентифікаторів PID.


Процес — це екземпляр програми, що виконується. Він включає:

  • Код: інструкції програми.
  • Пам’ять: стек (stack), купа (heap), сегменти даних.
  • Ресурси: відкриті файли, мережеві з’єднання.
  • Метадані: PID, власник, стан, пріоритет.

Процес проти Програми

Розділ «Процес проти Програми»
ПрограмаПроцес
Файл на дискуПрацює в пам’яті
ПасивнаАктивний
Одна копіяМоже бути багато екземплярів
/usr/bin/nginxPIDs 1234, 1235…

Ідентифікація та дерево процесів

Розділ «Ідентифікація та дерево процесів»

Кожен процес має:

  • PID (Process ID) — унікальний номер.
  • PPID (Parent PID) — номер процесу, який його створив.

Всі процеси утворюють дерево, корінь якого — PID 1:

Terminal window
# Переглянути дерево процесів
pstree -p

Життєвий цикл процесу

Розділ «Життєвий цикл процесу»

Народження: fork() та exec()

Розділ «Народження: fork() та exec()»

Нові процеси створюються у два кроки:

  1. fork() — ядро створює точну копію батьківського процесу (дитину).
  2. exec() — дитина замінює свій код кодом нової програми.
┌──────────┐ fork() ┌──────────┐
│ Батько │──────────────▶│ Дитина │ (копія батька)
│ (bash) │ │ (bash) │
└──────────┘ └────┬─────┘
exec("/bin/ls")
┌──────────┐
│ Дитина │ (тепер виконує ls)
│ (ls) │
└──────────┘

Процеси проходять через різні стани:

  • R (Running/Runnable): виконується або готовий до виконання (чекає на CPU).
  • S (Sleeping): спить, чекаючи на подію (наприклад, введення користувача).
  • D (Disk sleep): глибокий сон, чекає на ввід/вивід (неможливо перервати).
  • Z (Zombie): завершений, але ще не прибраний батьком.
  • T (Stopped): зупинений сигналом (наприклад, Ctrl+Z).

Сигнали — це програмні переривання для спілкування між процесами.

СигналНомерЩо робитьПризначення
SIGHUP1ЗавершитиПерезавантажити конфіг
SIGINT2ЗавершитиПереривання (Ctrl+C)
SIGKILL9ЗавершитиВбити негайно (неможливо ігнорувати)
SIGTERM15ЗавершитиВвічливе завершення (стандарт)
SIGSTOP19ЗупинитиПауза (неможливо ігнорувати)
SIGCONT18ПродовжитиВідновити роботу після паузи

Важливо: Завжди намагайтеся спочатку використати SIGTERM (15). Це дає програмі шанс закрити файли та зберегти дані. SIGKILL (9) використовуйте як останній засіб.


systemd: Сучасний менеджер системи

Розділ «systemd: Сучасний менеджер системи»

systemd — це стандартна система ініціалізації для більшості дистрибутивів Linux.

  • Паралельний запуск сервісів (швидке завантаження).
  • Декларативні файли конфігурації (unit files).
  • Автоматичне керування залежностями.
  • Збір логів через journald.

Основні типи Юнітів (Units)

Розділ «Основні типи Юнітів (Units)»
  • .service: фонові служби та додатки.
  • .socket: активація сервісів через мережеві порти.
  • .timer: заплановані завдання (заміна cron).
  • .mount: точки монтування файлових систем.

Керування через systemctl

Розділ «Керування через systemctl»
Terminal window
# Робота з сервісами
systemctl start nginx # Запустити
systemctl stop nginx # Зупинити
systemctl restart nginx # Перезапустити
systemctl status nginx # Перевірити статус
# Автозапуск при включенні
systemctl enable nginx # Ввімкнути
systemctl disable nginx # Вимкнути

GRUB2 — це перша програма, яка запускається при включенні комп’ютера. Вона завантажує ядро в пам’ять.

Відновлення пароля root (Лайфхак для LFCS)

Розділ «Відновлення пароля root (Лайфхак для LFCS)»

Якщо ви забули пароль:

  1. Перезавантажтесь, у меню GRUB натисніть ‘e’ для редагування.
  2. Знайдіть рядок, що починається з linux, і додайте в кінець rd.break.
  3. Натисніть Ctrl+X для завантаження.
  4. Введіть:
    Terminal window
    mount -o remount,rw /sysroot
    chroot /sysroot
    passwd root
    touch /.autorelabel
    exit
    reboot

  1. Чим відрізняється SIGTERM від SIGKILL?

    Відповідь SIGTERM — це прохання до програми завершити роботу ввічливо (вона може прибрати за собою). SIGKILL — це миттєве вбивство процесу ядром без шансу на збереження даних.
  2. Що таке процес-зомбі?

    Відповідь Це процес, який вже завершив виконання (exit), але його запис ще висить у таблиці процесів, бо батьківський процес не прочитав його статус завершення.
  3. Яка команда показує дерево процесів?

    Відповідь `pstree -p`.
  4. Як зробити так, щоб сервіс запускався автоматично при старті системи?

    Відповідь Використати команду `systemctl enable назва_сервісу`.

Завдання: Навчитися керувати процесами та сигналами.

  1. Запустіть довгий процес у фоні:
    Terminal window
    sleep 1000 &
  2. Знайдіть його PID та PPID:
    Terminal window
    ps -ef | grep sleep
  3. Призупиніть його сигналом STOP:
    Terminal window
    kill -STOP <ваш_PID>
  4. Перевірте статус (має бути T — Stopped):
    Terminal window
    ps -p <ваш_PID> -o pid,stat,cmd
  5. Відновіть роботу сигналом CONT:
    Terminal window
    kill -CONT <ваш_PID>
  6. Вбийте його ввічливо через TERM:
    Terminal window
    kill -15 <ваш_PID>

Критерії успіху: Ви розумієте стани процесів і вмієте керувати ними за допомогою сигналів.


  • Усе в Linux — це процеси.
  • Процеси народжуються через fork+exec.
  • Signals — це спосіб керувати життям процесів.
  • systemd — це головний менеджер усіх сервісів у системі.

Далі: Модуль 1.3: Ієрархія файлової системи — дізнайтеся, де в Linux лежать конфіги, програми та ваші дані.