#pid-1-die
Что произойдёт, если PID 1 умрёт в Docker-контейнере?
Что отвечать
Контейнер немедленно завершится. PID 1 в Linux особенный - когда он умирает, ядро шлёт SIGKILL всем остальным процессам в этом PID namespace, и namespace разрушается. На хосте умерший PID 1 (обычно systemd) - это kernel panic.
Что хотят услышать
Senior должен: - разделить PID 1 на хосте и PID 1 в namespace контейнера - назвать обязанности PID 1: reap zombies, обработка SIGTERM - упомянуть `tini`/`dumb-init` и флаг `docker run --init` - объяснить почему `bash` как PID 1 - плохая идея (по умолчанию не реагирует на SIGTERM, не reap'ит zombies)
Подводные камни
- ✗ Сказать «система пойдёт в panic» без оговорки про namespace - так бывает только для PID 1 хоста
- ✗ Забыть про обязанность PID 1 вызывать wait() для осиротевших дочерних процессов - иначе они становятся zombies
- ✗ Считать что node/python/java как ENTRYPOINT работают корректно в роли PID 1 - у большинства runtimes нет встроенного reaper'а
Follow-up
- ? Зачем нужен tini и почему Docker сделал `--init` отдельным флагом, а не дефолтом?
- ? Что произойдёт, если PID 1 не обрабатывает SIGTERM, а `docker stop` его шлёт?
- ? Как Kubernetes отличает «pod завершился штатно» от «PID 1 крашнулся»?
Глубина в базе знаний