Назад к вопросам
Middle
75
questionbank
Что такое зомби-процессы?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Зомби-процесс (defunct process) — это процесс, который завершил свое выполнение, но чья запись в таблице процессов все еще существует, так как родительский процесс не получил его код завершения. Он не потребляет ресурсы CPU, но занимает номер PID.
Жизненный цикл:
- Форк: Родительский процесс создает дочерний процесс (
fork()). - Завершение дочернего: Дочерний процесс завершается (
exit()). Ядро освобождает его ресурсы, но сохраняет некоторую информацию (PID, код завершения). - Ожидание родителя: Родительский процесс должен получить информацию о завершении дочернего (
wait()илиwaitpid()). Это позволяет ядру полностью удалить запись о дочернем процессе. - Зомби: Если родитель не вызывает
wait()до завершения дочернего, дочерний становится зомби.
Проблемы:
- Занимают PID, что может привести к исчерпанию доступных PID.
- Могут стать симптомом проблем в родительском процессе, который не обрабатывает завершение дочерних.
Способы идентификации:
# Поиск процессов в статусе Z (zombie)
ps aux | grep Z
Решение:
- Родительский процесс должен корректно использовать
wait()илиwaitpid()для сбора статуса завершения дочерних процессов. - Если родительский процесс завершился, а его зомби-потомок остался, зомби усыновляется процессом
init(PID 1), который корректно вызываетwait()для его очистки. - В крайних случаях (редко), может потребоваться перезапуск родительского процесса. Перезагрузка системы гарантированно удалит все зомби-процессы.