Sobes.tech
Middle
106
questionbank

Какой статус должен получить процесс от родительского процесса, чтобы стать зомби?

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

sobes.tech AI

Процесс становится зомби (zombie) или "процессом-призраком", когда он завершает свое выполнение (переходит в состояние EXIT_ZOMBIE), но запись о нем в таблице процессов все еще существует, ожидая пока его родительский процесс прочитает его статус завершения с помощью системного вызова wait() или waitpid(). До этого момента он занимает минимальные ресурсы (практически только запись в таблице процессов), но не освобождает полностью связанные с ним ресурсы.

В таблице процессов такой процесс обычно отображается с индикатором <defunct>.

# Пример вывода команды ps, показывающий зомби-процесс
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
someuser  1234  0.0  0.0      0     0 pts/0    Z+   10:00   0:00 [defunct_process]
...

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

Таким образом, основной статус, который получает процесс от родительского, чтобы стать зомби, это состояние завершения, которое родитель еще не обработал через wait* вызовы.