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* կանչերով։