Sobes.tech
Middle

Какъв статус трябва да получи процесът от родителския процес, за да стане зомби?

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* извиквания.