Ответ вслух Junior Процессы и сигналы обновлено

Зомби и сироты

Вопрос

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

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Когда процесс завершается, ядро освобождает его память, но сохраняет короткую запись: PID и код возврата. Её забирает родитель через wait().

Что должно прозвучать в ответе

  • Зомби: процесс завершился, но родитель не вызвал `wait()` и не забрал код возврата

  • Зомби не занимает память и CPU, только запись в таблице процессов и PID

  • Опасность в накоплении: можно исчерпать лимит PID

  • Убить зомби нельзя, лечат родителя или завершают его, тогда зомби усыновляет PID 1

  • Сирота: живой процесс, родитель которого умер; его усыновляет PID 1, это нормально

Что могут спросить следом

  • Почему в контейнерах часто копятся зомби?
  • Что такое субрипер (subreaper)?

Разбор

Когда процесс завершается, ядро освобождает его память, но сохраняет короткую запись: PID и код возврата. Её забирает родитель через wait(). Пока не забрал, процесс в состоянии Z, это зомби. Сам по себе он почти ничего не стоит, но если родитель с багом плодит детей и не ждёт их, зомби копятся и могут исчерпать pid_max или лимит PID в cgroup, и тогда новые процессы не создать. Сигналом зомби не убить, он уже мёртв. Нужно чинить родителя или завершить его: тогда зомби становятся сиротами, их усыновляет PID 1 и сразу вызывает wait. Сирота же это живой процесс без родителя, это нормальная ситуация, так работают демоны. В контейнерах зомби копятся, когда PID 1 это приложение, которое не умеет ждать детей; решение: tini или docker run --init.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.