Як вбити процес linux, losst
Незважаючи на те що Linux стабільніше ніж Windows, в плані роботи програм і різних сервісів, трапляється всяке і іноді виникає необхідність завершити процес Linux. Це може знадобитися, якщо програма завила, коли ви запустили системний сервіс в тлі через термінал, а не систему ініціалізації, а також у багатьох інших випадках, коли вбити процес Linux простіше, перезавантажувати всю систему.
У цій статті ми розглянемо кілька найпоширеніших способів завершити процес Linux. Опишемо детально як відбувається зупинка процесу і як все зробити правильно.
Як відбувається завершення процесу?
Управління процесами в операційній системі Linux здійснюється за допомогою сигналів. У тому числі і завершення будь-якого процесу. Сигнали передає система, але також їх може передавати користувач за допомогою спеціальних команд або навіть поєднань клавіш в терміналі. Коли процесу приходить сигнал про необхідність завершитися, він повинен виконати деякі підготовчі дії.
Необхідно завершити дочірні процеси, видалити тимчасові файли, сокети і так далі. Але в залежності від складності ситуації процес може реагувати не на всі сигнали. Розглянемо основні сигнали, які використовуються для завершення процесу:
- SIGINT - найбезпечніший сигнал завершення, означає Interrupt. Він відправляється процесу, запущеного з терміналу за допомогою поєднання клавіш Ctrl + C. Процес правильно завершує всі свої дії і повертає управління;
- SIGQUIT - це ще один сигнал, який відправляється за допомогою поєднання клавіш, програмою, запущеної в терміналі. Він повідомляє їй що потрібно завершитися і програма може виконати коректне завершення або проігнорувати сигнал. На відміну від попереднього, вона генерує дамп пам'яті. Поєднання клавіш Ctrl + /;
- SIGHUP - повідомляє процесу, що з'єднання з керуючим терміналом розірвано, відправляється, в основному, системою при розриві з'єднання з інтернетом;
- SIGTERM - негайно завершує процес, але обробляється програмою, тому дозволяє їй завершити дочірні процеси і звільнити всі ресурси;
- SIGKILL - теж негайно завершує процес, але, на відміну від попереднього варіанту, він не передається самого процесу, а обробляється ядром. Тому ресурси і дочірні процеси залишаються занедбаними.
Важливо розуміти, що потрібно дати процесу можливість завершитися коректно. Бажано, щоб порти і сокети були звільнені, закриті і видалені тимчасові файли. Тому ніколи не передавайте відразу SIGKILL. Передавайте сигнали завершення в послідовності, як вони перераховані вище.
Спочатку Ctrl + C. якщо це можливо, потім SIGTERM - він хоч і завершує процес, але робить цю культурно, і тільки в крайньому випадку SIGKILL. А тепер розглянемо як вбити процес по pid Linux на практиці. Якщо ви завжди використовуєте SIGKILL, тоді на думку спадає така картинка:

Як вбити процес Linux?
Для передачі сигналів процесам в Linux використовується утиліта kill. Її синтаксис дуже простий:
$ Kill -сигнал pid_процесса
Сигнал є один з вище перерахованих сигналів для завершення процесу. За замовчуванням, якщо цей параметр не вказано, використовується сигнал SIGTERM, що є дуже правильно. Також нам потрібно вказати який процес потрібно завершити. Для цього використовується унікальний ідентифікатор процесу - PID.
Припустимо, у нас виконується утиліта ping. Ми хочемо її завершити за допомогою kill. Тоді, спочатку ми дізнаємося її ідентифікатор за допомогою команди ps:
$ Ps aux | grep ping

У першому рядку відобразиться сама утиліта ping, а в другій сама програма ps. Беремо потрібний PID і завершуємо процес за допомогою SIGTERM: