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.