Sobes.tech
Middle

Quale stato deve ottenere un processo dal processo genitore per diventare uno zombie?

sobes.tech AI

Risposta dell'AI

Il processo diventa uno zombie o un "processo fantasma" quando termina la sua esecuzione (passa allo stato EXIT_ZOMBIE), ma la sua voce nella tabella dei processi esiste ancora, in attesa che il processo genitore legga il suo stato di terminazione tramite la chiamata di sistema wait() o waitpid(). Fino a quel momento, occupa risorse minime (praticamente solo la voce nella tabella dei processi), ma non libera completamente le risorse associate.

Nella tabella dei processi, un tale processo viene generalmente visualizzato con l'indicatore <defunct>.

# Esempio di output del comando ps, che mostra un processo zombie
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]
...

Per far scomparire il processo zombie, il processo genitore deve chiamare wait() o waitpid(). Se il processo genitore termina prima di leggere lo stato dei suoi figli zombie, questi figli diventano figli del processo init (con ID 1), che chiama automaticamente wait() per i suoi processi figli, eliminando così gli zombie.

Quindi, lo stato principale che un processo riceve dal processo genitore per diventare zombie è lo stato di terminazione, che il genitore non ha ancora elaborato tramite le chiamate wait*.