Лекція 49. Процеси, PID і керування програмами
Лекція 49. Процеси, PID і керування програмами
Section titled “Лекція 49. Процеси, PID і керування програмами”Рівень 9: Linux-інженер лабораторії
Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.
Що ми сьогодні розкриємо
Section titled “Що ми сьогодні розкриємо”- поглибити знання про процеси
- навчитися знаходити PID та коректно завершувати власний процес
- зрозуміти різницю між звичайним сигналом завершення та примусовим kill
Зв’язок з попередніми лекціями
Section titled “Зв’язок з попередніми лекціями”У цій лекції ми використаємо знання про процеси та PID з лекції 25, щоб навчитися безпечно керувати власними процесами.
Правило лабораторії
Section titled “Правило лабораторії”Завершуємо лише власні навчальні процеси, які щойно запустили самі. Не використовуємо sudo kill і не завершуємо незнайомі системні процеси.
Процес — керований об’єкт ОС
Section titled “Процес — керований об’єкт ОС”У лекції 25 ми вже запускали sleeper.py. Тепер подивимося на керування процесами. Linux може надсилати процесам signals — повідомлення про події.
Коли ми натискаємо Ctrl+C у терміналі, активний процес зазвичай отримує сигнал переривання. Команда kill PID за замовчуванням часто надсилає SIGTERM — прохання коректно завершитися.
SIGTERM і SIGKILL — не одне
Section titled “SIGTERM і SIGKILL — не одне”SIGTERM дає програмі шанс прибрати за собою: закрити файли, зберегти стан. kill -9 PID надсилає SIGKILL, який процес не може обробити або ігнорувати.
Тому -9 — не «сильніша стандартна команда», яку треба використовувати завжди. Це крайній варіант, коли звичайне завершення не працює.
graph LR
P["Процес (PID)"] --> T["SIGTERM
(звичайний kill)"]
P --> K["SIGKILL
(kill -9)"]
T -->|"програма завершує роботу сама"| G["Коректний вихід:
закриває файли, зберігає стан"]
K -->|"не можна перехопити"| F["Процес припиняється
негайно"]
style T fill:#e1f5fe
style K fill:#fce4ec
style G fill:#e8f5e9
top — живий радар процесів
Section titled “top — живий радар процесів”top оновлює список процесів і показує використання CPU та пам’яті. Не треба читати всі поля. На нашому рівні достатньо знайти PID, ім’я процесу, %CPU, %MEM і зрозуміти, що цифри змінюються в часі.
Приклади
Section titled “Приклади”Приклад 1
Section titled “Приклад 1”ps aux | grep '[p]ython' може допомогти знайти Python-процеси без зайвого рядка самого grep.
Приклад 2
Section titled “Приклад 2”kill 1234 просить процес 1234 завершитися; треба бути впевненим, що це твій навчальний процес.
Приклад 3
Section titled “Приклад 3”Якщо процес уже закінчився, PID може згодом бути використаний системою для іншого процесу. Тому перед kill треба знову перевірити, що PID належить потрібній програмі.
Linux-лабораторія: контрольований процес
Section titled “Linux-лабораторія: контрольований процес”Створи у ~/marko-lab/process-lab:
import time
while True: print("heartbeat", flush=True) time.sleep(2)Термінал 1:
python3 heartbeat.pyТермінал 2:
ps aux | grep '[h]eartbeat.py'Запиши PID, ще раз перевір рядок і виконай:
kill PIDПроцес має завершитися. kill -9 у цій вправі не потрібен.
Місія для Марка
Section titled “Місія для Марка”Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.
- запусти
heartbeat.py - знайди PID і переконайся, що командний рядок містить саме
heartbeat.py - заверши процес звичайним
kill PID - запусти знову й заверши через
Ctrl+C - відкрий
top, знайди знайомі колонки та вийди клавішеюq
Перевір себе
Section titled “Перевір себе”- Що таке PID?
- Що за замовчуванням намагається зробити
kill PID? - Чому
kill -9не має бути першим вибором? - Що робить Ctrl+C для активного terminal-процесу?
- Чому PID треба перевіряти безпосередньо перед завершенням?
Терміни однією фразою
Section titled “Терміни однією фразою”- PID (Process ID) — унікальний числовий номер процесу.
- Signal — повідомлення від ОС або користувача до процесу.
- SIGTERM — прохання коректно завершитися; дає процесу час прибрати за собою.
- SIGKILL (
-9) — примусове завершення, яке процес не може ігнорувати. kill PID— команда, що надсилає сигнал процесу.ps aux | grep— пошук процесів за назвою.top— інтерактивний переглядач процесів і ресурсів.
Чек-лист перед наступною лекцією
Section titled “Чек-лист перед наступною лекцією”- Чи можеш ти пояснити різницю між SIGTERM та SIGKILL?
- Чи вмієш ти використовувати команду
killдля завершення процесів? - Чи розумієш ти, як сигнали керують життєвим циклом процесів?
Що потрібно винести з лекції
Section titled “Що потрібно винести з лекції”- процесами можна керувати через сигнали
- звичайне коректне завершення краще за примусове
- перед дією над PID треба перевірити, якому процесу він зараз належить
Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.