Як вбити зомбі-процеси в Linux

You are currently viewing Як вбити зомбі-процеси в Linux

Простіше кажучи, зомбі-процес – це мертвий процес, який присутній в таблиці процесів системи. В ідеалі він повинен був бути очищений з таблиці процесів після того, як він завершив своє завдання/виконання, але з якоїсь причини його батьківський процес не очистив його належним чином після виконання.

У світі Linux процес повідомляє свій батьківський процес після того, як він завершив своє виконання і вийшов. Потім батьківський процес видалить процес з таблиці процесів. На цьому етапі, якщо батьківський процес не може прочитати статус процесу зі свого дочірнього (завершеного процесу), він не зможе видалити процес з пам’яті, і, таким чином, мертвий процес все ще продовжує існувати в таблиці процесів. – звідси зомбі!

Щоб вбити зомбі-процес, нам потрібно спочатку ідентифікувати його. Для пошуку зомбі-процесів можна використовувати наступну команду:

$ ps aux | egrep "Z|defunct"

Z в стовпці STAT і / або [defunct] в останньому стовпці (COMMAND) вихідних даних буде ідентифікувати процес Zombie.

Тепер практично неможливо вбити зомбі, тому що він вже мертвий! Що можна зробити, так це явно повідомити батьківський процес, щоб він міг повторити спробу читання стану дочірнього (мертвого) процесу і в кінцевому підсумку очистити їх з таблиці процесів. Це можна зробити, відправивши сигнал SIGCHLD батьківського процесу. Наступна команда може використовуватися для пошуку ідентифікатора батьківського процесу (PID):

$ ps -o ppid= <Child PID>

Якщо у вас є ідентифікатор батьківського зомбі-процесу, ви можете використовувати наступну команду для відправки сигналу SIGCHLD батьківському  процесу:

$ kill -s SIGCHLD <Parent PID>

Однак, якщо це не допоможе очистити зомбі-процес, вам доведеться вбити або перезапустити його батьківський процес АБО в разі величезного сплеску зомбі-процесів, що викликає або наближається до відключення системи, у вас не буде іншого вибору, окрім як піти на перезавантаження системи. Наступна команда може використовуватися, щоб убити його батьківський процес:

$ kill -9 <Parent PID>

Зверніть увагу, що завершення батьківського процесу вплине на всі його дочірні процеси, тому для забезпечення безпеки буде корисна швидка подвійна перевірка. В якості альтернативи, якщо кілька брехливих процесів-зомбі не споживають багато ЦП/пам’яті, краще вбити батьківський процес або перезавантажити систему при наступному плановому обслуговуванні системи.

192090cookie-checkЯк вбити зомбі-процеси в Linux

Автор публікації

Офлайн 1 тиждень

ViGo

Коментарі: 1Публікації: 1018Реєстрація: 29-04-2020
Если Вам понравилась статья, то поделитесь ею в соц.сетях:
guest
2 комментариев
Самый новый
Самый старший Наибольшее количество голосов
Inline Feedbacks
View all comments
Petro

Використовую вайбер в appimage. Debian Gnome. Закриваю, він в процесах висить.
Хоча на жодному з робочих столів його немає.
Цікаво, у мене статус “в мережі” чи ні? Не знаю.
Тому на всяк випадок вбиваю цього зомбі)

Last edited 1 месяц назад by Petro
VINRARUS

О так, цей Linux-костиль вміє доставляти проблеми…

Всі кажуть що зомбі-процеси додаткових ресурсів не займають, окрім місця в таблиці процесів (тобто інформації в /proc/[pid]).

Тому щоб від зомбі-апокаліпсису були помітні проблеми їх повинна бути багатотисячна армія, мені так здається (заtarяна папка /proc/[zombie_pid] займає 220 кБ наприклад).

ПС: щоб убити Адама можна виконати kill -9 1