Як безпечно знайти й зупинити завислий процес у Bash
Перевірте процес і його PID, спочатку надішліть SIGTERM, звірте результат і залиште SIGKILL лише для процесів, що не завершуються коректно.
Почати інтерактивний урокЩоб безпечно зупинити завислий процес, спочатку визначте його, перевірте актуальний ідентифікатор процесу (PID), надішліть звичайний сигнал TERM і переконайтеся, що процес завершився. Використовуйте KILL лише тоді, коли коректне завершення не спрацювало. Урок про завершення процесів надає контрольований процес, на якому можна потренувати команду перед роботою зі справжньою системою.
Перевірте процес перед надсиланням сигналу
Почніть зі списку процесів, а не з PID, скопійованого зі старого повідомлення:
ps -ef
Читайте PID разом із власником і повною командою. Якщо у вас уже є кандидат, наприклад PID 123, звузьте виведення:
ps -p 123 -o pid,ppid,user,stat,etime,command
Замініть 123 на PID, який щойно побачили. Після завершення програми ідентифікатор процесу може бути використаний повторно, тому саме число не є надійним доказом. Служба також може мати кілька робочих процесів зі схожими назвами — переконайтеся, який із них справді завис.
Попросіть процес завершитися коректно
Перевіривши додатний PID, явно надішліть TERM:
kill -TERM 123
У Bash звичайна команда kill 123 також типово надсилає TERM. Сигнал просить програму завершитися й дає їй змогу закрити файли, закінчити запис та виконати обробники очищення. Трохи зачекайте, а потім знову перевірте той самий PID:
ps -p 123 -o pid,user,stat,command
Відсутність рядка зазвичай означає, що процес завершився. Якщо рядок залишився, процес усе ще існує, але причиною може бути повільне очищення, заблоковане введення-виведення, призупинений стан або супервізор, який запустив заміну. Перевірте журнали й стан служби, перш ніж посилювати сигнал.
Використовуйте SIGKILL лише як останній крок
Якщо початковий процес усе ще існує, ігнорує TERM, а ви впевнені, що обрали правильний об'єкт, надішліть:
kill -KILL 123
KILL неможливо перехопити чи проігнорувати. Операційна система зупиняє процес, не дозволяючи програмі виконати очищення, тому можуть залишитися частково записані дані, тимчасові файли або покинуті дочірні процеси. Сигнал може припинити поточний процес, але не доводить, що першопричину усунуто.
Використовуйте додатний PID. Значення 0, -1 або інше від'ємне число можуть адресувати групу процесів чи значно ширший набір. Уникайте скопійованих широких команд, наприклад шаблонів pkill, доки точно не зрозумієте, що вони знаходять.
Обробляйте помилки дозволів і перезапуск служб
“Operation not permitted” зазвичай означає, що процес належить іншому обліковому запису або захищений системною політикою. Ще раз перевірте власника, перш ніж застосовувати sudo. Адміністративні привілеї дають змогу виконати правильне рішення, але не роблять неперевірений PID безпечним.
Якщо процес одразу з'являється знову, його може перезапускати менеджер служб або оркестратор контейнерів. Перевірте цей менеджер і журнали програми замість того, щоб знову й знову зупиняти процеси-замінники.
Перевірка знань
1 / 1Що потрібно перевірити безпосередньо перед надсиланням сигналу?
Скористайтеся посібником зі списку процесів, якщо потрібна допомога з читанням виведення ps. Типовий сигнал і припустимі форми PID описано в довідці Bash про вбудовані команди керування завданнями.
Посилання
Ці посилання на документацію надають авторитетну інформацію про команди, використані в цій статті.
Далі
Фільтруйте та керуйте процесами.