Какие состояния бывают у процесса в Linux и что такое зомби и сироты?
- Что значит состояние D в ps?
- Как убить процесс-зомби?
В ps видно состояние: R — выполняется или ждёт CPU, S — спит в ожидании события (норма для большинства), D — непрерываемый сон в ожидании ввода-вывода (не реагирует даже на SIGKILL), T — остановлен, Z — зомби: процесс завершился, но родитель не забрал код выхода через wait. Зомби не занимает память, только запись в таблице процессов; убить его нельзя — нужно исправить или перезапустить родителя.
- Сирота — родитель умер раньше, процесс усыновляет PID 1 (или subreaper)
- Много процессов в D — проблема с диском или сетевой ФС (NFS); они поднимают load average
- Тысячи зомби исчерпывают лимит PID — новые процессы не создаются
А ещё В контейнере без init зомби некому собирать — отсюда tini
Подробно
Как смотреть:
ps -eo pid,ppid,stat,cmd --forest # дерево с состояниями
ps -eo stat,ppid | awk '$1 ~ /^Z/' # зомби и их родители
cat /proc/PID/status # State, родитель, потоки
Зомби. После завершения ядро хранит код выхода, пока родитель не вызовет wait. Если родитель забыл (ошибка в коде, запускает дочерние процессы и не ждёт их), зомби копятся. Лечение — исправить родителя или завершить его: тогда зомби перейдут к PID 1, который их соберёт.
D-состояние. Процесс ждёт ответа устройства внутри ядра и не может быть прерван. Зависшее NFS-хранилище или умирающий диск дают «неубиваемые» процессы и высокий load average при пустом CPU.
Сироты и PID 1. Обычный init собирает усыновлённых сирот. В контейнере PID 1 — само приложение, которое этого не умеет, поэтому используют tini или --init.
Что хотят услышать
- Основные состояния процесса.
- Природа зомби и почему их не убить.
- Связь D-состояния с load average, роль PID 1.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Процесс в состоянии D немедленно реагирует на SIGKILL
- ✓Зомби — завершённый процесс, чей код выхода родитель ещё не забрал через wait
- ✗Зомби — зависший процесс, который занимает память и не реагирует на SIGTERM, только на SIGKILL
- ✗Состояние S означает зависание процесса
Разбор темы
- Linux — диагностика сервера
С чего начинать, когда сервер ведёт себя плохо, как читать load average, где на самом деле свободная память, кто такие зомби и куда делось место на диске.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.