Sobes.tech
Middle

Kokį statusą procesas turi gauti iš tėvo proceso, kad taptų zombiu?

sobes.tech AI

Atsakymas iš AI

Procesas tampa zombi arba "vaiduoklio procesu", kai jis baigia savo vykdymą (perkelia į būseną EXIT_ZOMBIE), tačiau jo įrašas proceso lentelėje vis dar egzistuoja, laukdamas, kol jo tėvinis procesas perskaitys jo užbaigimo būseną naudodamas sisteminį iškvietimą wait() arba waitpid(). Iki tol jis užima minimalų išteklių kiekį (praktškai tik įrašą proceso lentelėje), tačiau visiškai neišlaisvina su juo susijusių išteklių.

Proceso lentelėje toks procesas paprastai rodomas su indikatoriumi <defunct>.

# ps komandos išvestis, rodanti zombi procesą
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]
...

Kad zombi procesas išnyktų, tėvinis procesas turi iškviesti wait() arba waitpid(). Jei tėvinis procesas baigiasi anksčiau, nei perskaito savo zombi vaikų būseną, šie vaikai tampa init proceso (su ID 1) vaikais, kuris automatiškai iškviečia wait() savo vaikams, taip išvalydamas zombių procesus.

Taigi, pagrindinė būsena, kurią procesas gauna iš tėvinio proceso, kad taptų zombi, yra užbaigimo būsena, kurią tėvinis procesas dar nėra apdorojęs per wait* iškvietimus.