JavaRush /Курси /Docker SELF /Завершення процесів: команди `kill`, `killall`, `pkill`

Завершення процесів: команди `kill`, `killall`, `pkill`

Docker SELF
Рівень 2 , Лекція 5
Відкрита

1. Завершення процесів

Сьогодні ми зробимо крок далі та освоїмо команди, які дозволяють ефективно завершувати процеси. Готуйтеся, бо вашому терпінню "завислих" програм скоро прийде кінець!

Кожна запущена програма або команда в Linux — це процес. Але що робити, якщо програма зависла, з’їдає 100% ресурсів процесора або просто перестала адекватно працювати? Завдання адміністратора (або розробника) — втрутитися і завершити "бунтівний" процес. У Linux для цього використовується цілий арсенал інструментів: kill, killall та pkill. Не хвилюйтеся, незважаючи на грізні назви, ми тут не для того, щоб ламати все підряд. Швидше, це витончений спосіб навести порядок.


2. Команда kill

Основи

Команда kill завершує процес за його ідентифікатором (PID). PID — це унікальний номер, який система призначає кожному процесу. Наприклад, якщо ви хочете завершити процес з PID 1234, використовуйте наступну команду:

kill 1234

Linux за своєю природою доволі демократичний, тому команда kill відправляє процесу не наказ "померти", а запит на завершення. Цей запит називається "сигнал". За замовчуванням kill відправляє сигнал SIGTERM (15).

Що таке сигнал?

Linux використовує сигнали для спілкування з процесами. Це як надсилати листівки з різними намірами:

  • SIGTERM (15): "Будь ласка, завершися". Це ввічливе прохання процесу закінчити виконання.
  • SIGKILL (9): "Ну все, досить, ти звільнений!" Примусове завершення процесу.
  • SIGHUP (1): "Ей, перезавантаж конфігурацію". Використовується для перезапуску деяких процесів без їх зупинки.

Приклад примусового завершення процесу:

kill -9 1234

Якщо процес відмовляється завершитись при SIGTERM, ви можете відправити більш жорсткий сигнал — SIGKILL.

Як дізнатися PID процесу?

Щоб використовувати команду kill, вам потрібно знати PID процесу. На допомогу приходять вже знайомі команди ps, top або htop. Наприклад, вивід команди ps aux покаже вам усі запущені процеси:

ps aux | grep firefox

Цей запит знайде процес Firefox і виведе його PID.

Процес завершено, можна видихнути. Але що робити, якщо "завислих" процесів кілька? Тут у гру вступають команди killall і pkill.


3. Команда killall

Зручність для масового завершення

Команда killall дозволяє завершити всі процеси з певним ім'ям. Вам не потрібно вручну шукати PID, все робиться значно простіше. Наприклад, якщо ви хочете закрити всі запущені інстанси Firefox:

killall firefox

Як і команда kill, killall надсилає процесам сигнали. Ви можете вказати конкретний сигнал:

killall -9 firefox

Корисна порада

Будьте обережні з командами типу killall. Якщо ви випадково вкажете занадто загальний процес, наприклад, killall python, ви можете завершити одразу всі запущені Python-додатки, включаючи серверні задачі чи важливі скрипти.

Які сигнали підтримуються?

Для всіх команд kill, killall та pkill список доступних сигналів можна переглянути за допомогою команди:

kill -l

4. Команда pkill

Шукаємо процеси за іменем (або його частиною)

Команда pkill працює схоже з killall, але більш гнучка. Вона дозволяє завершувати процеси, які відповідають певному шаблону. Наприклад:

pkill fire

Команда завершить усі процеси, які містять слово "fire" в імені. Це зручно для випадків, коли ім'я процесу довге або вам відома лише його частина.

Завершення процесів користувачів

Ви можете завершувати процеси, що належать певним користувачам. Наприклад:

pkill -u username

Це завершить усі процеси, що належать користувачу username.

Порівняння kill, killall та pkill

Команда Особливості
kill Завершує процес за PID. Працює точково.
killall Завершує усі процеси з вказаним іменем. Зручно для масового закриття.
pkill Завершує процеси за ім'ям або шаблоном. Підтримує додаткові параметри, такі як ім'я користувача.

5. Практика: завершуємо процеси

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

sleep 300 &
sleep 400 &
sleep 500 &

Ці команди створять три фонові процеси з різним часом очікування. Тепер ви можете попрацювати з командами kill, killall і pkill.

  1. Перегляд усіх запущених процесів sleep за допомогою команди ps:
ps aux | grep sleep

Ви побачите PID кожного процесу.

  1. Завершіть процес з PID, наприклад, 1234:
kill 1234
  1. Завершіть одразу всі процеси sleep:
killall sleep
  1. Запустіть ще кілька процесів sleep і завершіть їх за допомогою pkill:
pkill sl

6. Типові помилки та важливі нюанси

Якщо ви намагаєтесь завершити процес, до якого у вас немає прав (наприклад, процес іншого користувача), команда видасть помилку. Для цього потрібно мати привілеї суперкористувача (sudo). Наприклад:

sudo kill 1234

Ще одним джерелом плутанини може бути використання занадто агресивних сигналів -9. Це еквівалентно вимиканню комп'ютера з розетки: система не встигне звільнити ресурси чи зберегти дані. Використовуйте SIGKILL тільки в крайньому випадку.

Будьте обережними з killall та pkill, особливо якщо ви керуєте сервером. Завершення процесів "всліпу" може призвести до втрати важливих даних.


Чому важливо знати команди для завершення процесів?

Ці команди мають широкий спектр застосувань, починаючи від знищення завислих додатків і закінчуючи керуванням серверними процесами. На співбесідах знання kill та pkill може стати важливим показником вашої компетентності, особливо якщо мова йде про адміністрування систем чи роботу з бекендом.

Використовуйте ці знання для створення скриптів, які автоматично завершують неконтрольовані процеси або звільняють зайняті порти. Наприклад, перед запуском сервера, який займає порт 8080, можна використати:

pkill -f "port 8080"

Гнучкість та потужність цих команд роблять їх незамінними інструментами будь-якого Linux-спеціаліста.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ