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.
- Перегляд усіх запущених процесів
sleepза допомогою командиps:
ps aux | grep sleep
Ви побачите PID кожного процесу.
- Завершіть процес з PID, наприклад, 1234:
kill 1234
- Завершіть одразу всі процеси
sleep:
killall sleep
- Запустіть ще кілька процесів
sleepі завершіть їх за допомогоюpkill:
pkill sl
6. Типові помилки та важливі нюанси
Якщо ви намагаєтесь завершити процес, до якого у вас немає прав (наприклад, процес іншого користувача), команда видасть помилку. Для цього потрібно мати привілеї суперкористувача (sudo). Наприклад:
sudo kill 1234
Ще одним джерелом плутанини може бути використання занадто агресивних сигналів -9. Це еквівалентно вимиканню комп'ютера з розетки: система не встигне звільнити ресурси чи зберегти дані. Використовуйте SIGKILL тільки в крайньому випадку.
Будьте обережними з killall та pkill, особливо якщо ви керуєте сервером. Завершення процесів "всліпу" може призвести до втрати важливих даних.
Чому важливо знати команди для завершення процесів?
Ці команди мають широкий спектр застосувань, починаючи від знищення завислих додатків і закінчуючи керуванням серверними процесами. На співбесідах знання kill та pkill може стати важливим показником вашої компетентності, особливо якщо мова йде про адміністрування систем чи роботу з бекендом.
Використовуйте ці знання для створення скриптів, які автоматично завершують неконтрольовані процеси або звільняють зайняті порти. Наприклад, перед запуском сервера, який займає порт 8080, можна використати:
pkill -f "port 8080"
Гнучкість та потужність цих команд роблять їх незамінними інструментами будь-якого Linux-спеціаліста.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ