Модуль 1.2: Процеси та systemd
Основи системи | Складність:
[MEDIUM]| Час: 30–35 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 1.1: Архітектура ядра
- Бажано: Мати доступ до терміналу Linux.
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після проходження цього модуля ви зможете:
- Керувати процесами за допомогою
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/nginx | PIDs 1234, 1235… |
Ідентифікація та дерево процесів
Розділ «Ідентифікація та дерево процесів»Кожен процес має:
- PID (Process ID) — унікальний номер.
- PPID (Parent PID) — номер процесу, який його створив.
Всі процеси утворюють дерево, корінь якого — PID 1:
# Переглянути дерево процесівpstree -pЖиттєвий цикл процесу
Розділ «Життєвий цикл процесу»Народження: fork() та exec()
Розділ «Народження: fork() та exec()»Нові процеси створюються у два кроки:
- fork() — ядро створює точну копію батьківського процесу (дитину).
- exec() — дитина замінює свій код кодом нової програми.
┌──────────┐ fork() ┌──────────┐│ Батько │──────────────▶│ Дитина │ (копія батька)│ (bash) │ │ (bash) │└──────────┘ └────┬─────┘ │ exec("/bin/ls") │ ▼ ┌──────────┐ │ Дитина │ (тепер виконує ls) │ (ls) │ └──────────┘Стани процесів
Розділ «Стани процесів»Процеси проходять через різні стани:
- R (Running/Runnable): виконується або готовий до виконання (чекає на CPU).
- S (Sleeping): спить, чекаючи на подію (наприклад, введення користувача).
- D (Disk sleep): глибокий сон, чекає на ввід/вивід (неможливо перервати).
- Z (Zombie): завершений, але ще не прибраний батьком.
- T (Stopped): зупинений сигналом (наприклад, Ctrl+Z).
Сигнали (Signals)
Розділ «Сигнали (Signals)»Сигнали — це програмні переривання для спілкування між процесами.
Основні сигнали
Розділ «Основні сигнали»| Сигнал | Номер | Що робить | Призначення |
|---|---|---|---|
| SIGHUP | 1 | Завершити | Перезавантажити конфіг |
| SIGINT | 2 | Завершити | Переривання (Ctrl+C) |
| SIGKILL | 9 | Завершити | Вбити негайно (неможливо ігнорувати) |
| SIGTERM | 15 | Завершити | Ввічливе завершення (стандарт) |
| SIGSTOP | 19 | Зупинити | Пауза (неможливо ігнорувати) |
| SIGCONT | 18 | Продовжити | Відновити роботу після паузи |
Важливо: Завжди намагайтеся спочатку використати SIGTERM (15). Це дає програмі шанс закрити файли та зберегти дані. SIGKILL (9) використовуйте як останній засіб.
systemd: Сучасний менеджер системи
Розділ «systemd: Сучасний менеджер системи»systemd — це стандартна система ініціалізації для більшості дистрибутивів Linux.
Чому systemd?
Розділ «Чому systemd?»- Паралельний запуск сервісів (швидке завантаження).
- Декларативні файли конфігурації (unit files).
- Автоматичне керування залежностями.
- Збір логів через journald.
Основні типи Юнітів (Units)
Розділ «Основні типи Юнітів (Units)»- .service: фонові служби та додатки.
- .socket: активація сервісів через мережеві порти.
- .timer: заплановані завдання (заміна cron).
- .mount: точки монтування файлових систем.
Керування через systemctl
Розділ «Керування через systemctl»# Робота з сервісамиsystemctl start nginx # Запуститиsystemctl stop nginx # Зупинитиsystemctl restart nginx # Перезапуститиsystemctl status nginx # Перевірити статус
# Автозапуск при включенніsystemctl enable nginx # Ввімкнутиsystemctl disable nginx # ВимкнутиЗавантажувач GRUB2
Розділ «Завантажувач GRUB2»GRUB2 — це перша програма, яка запускається при включенні комп’ютера. Вона завантажує ядро в пам’ять.
Відновлення пароля root (Лайфхак для LFCS)
Розділ «Відновлення пароля root (Лайфхак для LFCS)»Якщо ви забули пароль:
- Перезавантажтесь, у меню GRUB натисніть ‘e’ для редагування.
- Знайдіть рядок, що починається з
linux, і додайте в кінецьrd.break. - Натисніть Ctrl+X для завантаження.
- Введіть:
Terminal window mount -o remount,rw /sysrootchroot /sysrootpasswd roottouch /.autorelabelexitreboot
Тест
Розділ «Тест»-
Чим відрізняється SIGTERM від SIGKILL?
Відповідь
SIGTERM — це прохання до програми завершити роботу ввічливо (вона може прибрати за собою). SIGKILL — це миттєве вбивство процесу ядром без шансу на збереження даних. -
Що таке процес-зомбі?
Відповідь
Це процес, який вже завершив виконання (exit), але його запис ще висить у таблиці процесів, бо батьківський процес не прочитав його статус завершення. -
Яка команда показує дерево процесів?
Відповідь
`pstree -p`. -
Як зробити так, щоб сервіс запускався автоматично при старті системи?
Відповідь
Використати команду `systemctl enable назва_сервісу`.
Практична вправа
Розділ «Практична вправа»Завдання: Навчитися керувати процесами та сигналами.
- Запустіть довгий процес у фоні:
Terminal window sleep 1000 & - Знайдіть його PID та PPID:
Terminal window ps -ef | grep sleep - Призупиніть його сигналом STOP:
Terminal window kill -STOP <ваш_PID> - Перевірте статус (має бути
T— Stopped):Terminal window ps -p <ваш_PID> -o pid,stat,cmd - Відновіть роботу сигналом CONT:
Terminal window kill -CONT <ваш_PID> - Вбийте його ввічливо через TERM:
Terminal window kill -15 <ваш_PID>
Критерії успіху: Ви розумієте стани процесів і вмієте керувати ними за допомогою сигналів.
Підсумок
Розділ «Підсумок»- Усе в Linux — це процеси.
- Процеси народжуються через fork+exec.
- Signals — це спосіб керувати життям процесів.
- systemd — це головний менеджер усіх сервісів у системі.
Далі: Модуль 1.3: Ієрархія файлової системи — дізнайтеся, де в Linux лежать конфіги, програми та ваші дані.