Показать статистику
0 голосов
от (620 баллов)
Объясните популярно, в чем отличие zombie процесса от orphaned? С моей точки зрения, оба процесса "брошены" и ничего не делают. Но почему то они все таки классифицируются по-разному. Спасибо за ответы заранее
1.8тыс. просмотров 1 ответов

1 Ответ

0 голосов
от (140 баллов)

Отличие в том, что orphan process (процесс-сирота) всё еще активен. Суть в том, что его родительский процесс был по какой-либо причине прерван, и сирота теперь переходит под руководство init, чей ID процесса равен 1. PID orphan процесса получит значение 1. Пользователь также может создать подобный процесс, отсоединив его от терминала. Сиротские процессы используют много ресурсов, их легко найти с помощью top или htop. Чтобы удалить процесс, используйте kill -9 PID.

В отличии от процесса-сироты, zombie processes (зомби-процесс) неактивен, но контролируется родительским процессом, пока тот не решит, что статус выхода дочерних процессов больше не нужен. Он не использует ресурсы и не может быть запланирован для выполнения. Иногда родительский процесс удерживает дочерний процесс в состоянии зомби, чтобы гарантировать, что будущие дочерние процессы не получат тот же PID. Если вы уничтожите родителя зомби-процесса, зомби-процесс тоже умрет. Для этого найдите родительский PID (PPID) зомби и отправьте ему сигнал SIGCHLD (17): kill -17 ppid.
На стэк оверфлоу предлагали такую конструкцию что бы убивать зомби-процессы

kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
от (17.4тыс. баллов)
0

Зомби - это фантомный процесс, который просто имеет запись в таблице процессов, но при этом никакие ресурсы кроме пространства таблицы процессов, не используются. Насколько мне известно, старые ядра Linux (да и FreeBSD тоже) не умели убивать зомби и требовалась перезазгрузка. Но поскольку эти зомби просто висели и есть не просили, на них можно было было забить. 

Википедия так же пишет:
Процесс при завершении освобождает все свои ресурсы (за исключением PID — идентификатора процесса) и становится «зомби» — пустой записью в таблице процессов, хранящей код завершения для родительского процесса.

...