Какъв статус трябва да получи процесът от родителския процес, за да стане зомби?
sobes.tech AI
Отговор от AI
Процесът става зомби или "призрачен процес", когато завърши изпълнението си (превключва в състояние 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* извиквания.