Що таке зомбі-процес:
Це процес, який закінчився, але не весь він негайно видаляється з пам'яті, оскільки його дескриптор процесу залишається в пам'яті.
Якою має бути нормальна поведінка процесу:
Коли процес завершується, статус процесу стає
EXIT_ZOMBIE
і батько процесу отримує сповіщення про те, що його дочірній процес помер разом із
SIGCHLD
знак.
Після цього передбачається, що батьківський процес запустить метод
wait()
для системного виклику для зчитування стану виходу мертвого процесу та іншої інформації. Після
wait()
викликається, зомбі-процес видаляється з пам'яті. Це відбувається швидко, тому ви не бачите, як на вашій системі накопичуються зомбі-процеси. Але в тих випадках, коли ми бачимо, що накопичується кілька зомбі-процесів, це ситуація, коли програмний код не ефективний.
Як знайти зомбі процеси:
Виконання команди
top
Виконання команди
ps -ef | grep defunct
Як припинити накопичувальні зомбі-процеси:
У більшості випадків зомбі-процеси мають однаковий ідентифікатор батьківського процесу.
Прибрати процес можна двома методами:
- Надішліть файл
SIGCHLD
сигнал батьківському процесу.
Цей сигнал повідомляє батьківському процесу запустити wait()
Система виклику і прибирання своїх зомбі-дітей:
kill -s SIGCHLD <PPID>
Приклад:
kill -s SIGCHLD 2201
- Вбити зомбі-батьківський процес
kill -9 <PPID>
Приклад:
kill -9 2201