Назад к вопросам
Middle
75
questionbank

Что такое зомби-процессы?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Зомби-процесс (defunct process) — это процесс, который завершил свое выполнение, но чья запись в таблице процессов все еще существует, так как родительский процесс не получил его код завершения. Он не потребляет ресурсы CPU, но занимает номер PID.

Жизненный цикл:

  1. Форк: Родительский процесс создает дочерний процесс (fork()).
  2. Завершение дочернего: Дочерний процесс завершается (exit()). Ядро освобождает его ресурсы, но сохраняет некоторую информацию (PID, код завершения).
  3. Ожидание родителя: Родительский процесс должен получить информацию о завершении дочернего (wait() или waitpid()). Это позволяет ядру полностью удалить запись о дочернем процессе.
  4. Зомби: Если родитель не вызывает wait() до завершения дочернего, дочерний становится зомби.

Проблемы:

  • Занимают PID, что может привести к исчерпанию доступных PID.
  • Могут стать симптомом проблем в родительском процессе, который не обрабатывает завершение дочерних.

Способы идентификации:

# Поиск процессов в статусе Z (zombie)
ps aux | grep Z

Решение:

  • Родительский процесс должен корректно использовать wait() или waitpid() для сбора статуса завершения дочерних процессов.
  • Если родительский процесс завершился, а его зомби-потомок остался, зомби усыновляется процессом init (PID 1), который корректно вызывает wait() для его очистки.
  • В крайних случаях (редко), может потребоваться перезапуск родительского процесса. Перезагрузка системы гарантированно удалит все зомби-процессы.