Як знайти процеси zombie?
використовуйте команди top чи ps:
# top
Чи
# ps aux | awk '{ print $8 " " $2 }' | grep -w Z
Output:
Z 4104 Z 5320 Z 2945
Як вбити процеси zombie?
Ви не можете вбити їх, оскільки вони вже мертві. Якщо ви маєте багато zombie процесів – спробуйте рестарту вати батьківський процес чи сервіс.
Ви можете спробувати вбити zombie процес за допомогою PID, що ви отримали з команди, що описана вище. наприклад вбити zombie процес з PID 4104:
# kill -9 4104
Проте це не гарантує, що ви вб’єте цей zombie процес.
Zombies – це мертві процеси. Ви не можете вбити мертвого. Всі процеси вмирають, та потім вони становляться zombie. Вони майже не споживати ресурсів, як і очікується, оскільки вони мертві! Причина того, що вони стали zombie, – це того, що батьківський процес може отримати статус закінчення zombie та статистику використаних ресурсів. Батько посилає сигнал до операційної системи, що йому більше не потрібен zombie, використовуючи системний виклик wait().
Коли процес вмирає, всі дитячі процеси стають дітьми процесу номер 1, що є процесом init. Init завжди очікує дітей,що вмирають так щоб вони не лишилися зомбі.
Якщо ви маєте процеси zombie – це означає, що ці zombie не дочекалися своїх батьків (погляньте на PPID, що відображається командою ps -l). Є 3 варіанти: пофіксити батьківський процес (зробити так щоб він очікував); вбити батьківський процес; чи жити із ними. Пам’ятайте, що жити з ним – не важко, оскільки zombie забирають не більше однієї лінії в ps.
Вам не обхідно послати батьківському процесу сигнал SIGCHLD чи вбити його:
ps -eo pid,ppid,user,args,stat –sort stat | grep Z | awk ‘{ print $2 }’ | sort -u
Дасть вам ID батьківськів процесів
kill -s SIGCHLD
чи
kill