Skip to content

Лекція 49. Процеси, PID і керування програмами

Лекція 49. Процеси, PID і керування програмами

Section titled “Лекція 49. Процеси, PID і керування програмами”

Рівень 9: Linux-інженер лабораторії

Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.

Що ми сьогодні розкриємо

Section titled “Що ми сьогодні розкриємо”
  • поглибити знання про процеси
  • навчитися знаходити PID та коректно завершувати власний процес
  • зрозуміти різницю між звичайним сигналом завершення та примусовим kill

Зв’язок з попередніми лекціями

Section titled “Зв’язок з попередніми лекціями”

У цій лекції ми використаємо знання про процеси та PID з лекції 25, щоб навчитися безпечно керувати власними процесами.

Завершуємо лише власні навчальні процеси, які щойно запустили самі. Не використовуємо sudo kill і не завершуємо незнайомі системні процеси.

Процес — керований об’єкт ОС

Section titled “Процес — керований об’єкт ОС”

У лекції 25 ми вже запускали sleeper.py. Тепер подивимося на керування процесами. Linux може надсилати процесам signals — повідомлення про події.

Коли ми натискаємо Ctrl+C у терміналі, активний процес зазвичай отримує сигнал переривання. Команда kill PID за замовчуванням часто надсилає SIGTERM — прохання коректно завершитися.

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 і зрозуміти, що цифри змінюються в часі.

ps aux | grep '[p]ython' може допомогти знайти Python-процеси без зайвого рядка самого grep.

kill 1234 просить процес 1234 завершитися; треба бути впевненим, що це твій навчальний процес.

Якщо процес уже закінчився, PID може згодом бути використаний системою для іншого процесу. Тому перед kill треба знову перевірити, що PID належить потрібній програмі.

Linux-лабораторія: контрольований процес

Section titled “Linux-лабораторія: контрольований процес”

Створи у ~/marko-lab/process-lab:

heartbeat.py
import time
while True:
print("heartbeat", flush=True)
time.sleep(2)

Термінал 1:

Terminal window
python3 heartbeat.py

Термінал 2:

Terminal window
ps aux | grep '[h]eartbeat.py'

Запиши PID, ще раз перевір рядок і виконай:

Terminal window
kill PID

Процес має завершитися. kill -9 у цій вправі не потрібен.

Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.

  1. запусти heartbeat.py
  2. знайди PID і переконайся, що командний рядок містить саме heartbeat.py
  3. заверши процес звичайним kill PID
  4. запусти знову й заверши через Ctrl+C
  5. відкрий top, знайди знайомі колонки та вийди клавішею q
  • Що таке PID?
  • Що за замовчуванням намагається зробити kill PID?
  • Чому kill -9 не має бути першим вибором?
  • Що робить Ctrl+C для активного terminal-процесу?
  • Чому PID треба перевіряти безпосередньо перед завершенням?
  • PID (Process ID) — унікальний числовий номер процесу.
  • Signal — повідомлення від ОС або користувача до процесу.
  • SIGTERM — прохання коректно завершитися; дає процесу час прибрати за собою.
  • SIGKILL (-9) — примусове завершення, яке процес не може ігнорувати.
  • kill PID — команда, що надсилає сигнал процесу.
  • ps aux | grep — пошук процесів за назвою.
  • top — інтерактивний переглядач процесів і ресурсів.

Чек-лист перед наступною лекцією

Section titled “Чек-лист перед наступною лекцією”
  • Чи можеш ти пояснити різницю між SIGTERM та SIGKILL?
  • Чи вмієш ти використовувати команду kill для завершення процесів?
  • Чи розумієш ти, як сигнали керують життєвим циклом процесів?

Що потрібно винести з лекції

Section titled “Що потрібно винести з лекції”
  • процесами можна керувати через сигнали
  • звичайне коректне завершення краще за примусове
  • перед дією над PID треба перевірити, якому процесу він зараз належить

Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.