Kas yra zombių procesas?

Zombių procesas yra kompiuterio programos, kuri išsaugo proceso lentelės įrašą, nepaisant to, kad baigta vykdyti, pavyzdys. Tokie nebeveikiantys procesai, kaip šie, paprastai siejami su „Unix®“ ir kitomis panašiomis operacinėmis sistemomis dėl to, kaip jie tvarko antrinius procesus. Kai antrinis procesas baigiamas vykdyti, tėvas paprastai yra atsakingas už jo pašalinimą iš proceso lentelės. Paprastai neįmanoma tiesiogiai pašalinti zombių proceso naudojant žudymo komandą, tačiau dažnai galima priversti jį pašalinti, jei operatorius naudoja signalo vaiko (SIGCHLD) pranešimą. To nepadarius, zombių procesas gali būti pašalintas netiesiogiai nužudant tėvą.

Zombių procesas yra metaforinis aprašomasis terminas, nurodantis gyvus mirusius. Neveikiantys procesai Unix® ir panašiose operacinėse sistemose gali būti laikomi analogiškais zombiams, nes jie palaiko proceso lentelę, nors nebeatlieka numatytų funkcijų. Kai procesas baigiamas vykdyti, kartais sakoma, kad jis mirė, o priemonės, kuriomis operacinė sistema atkuria procesų lentelės paskirstymą, gali būti žinomos kaip pjovimas. Techniškai manoma, kad zombių tėvų procesas turi pjauti savo vaikus, nors taip nutinka ne visada.

Yra tam tikrų atvejų, kai zombių proceso egzistavimas gali būti tyčinis ar net pageidaujamas. Nutraukus antrinio proceso vykdymą, tėvui gali tekti vėliau paleisti kitą tos pačios programos egzempliorių. Jei zombis nebuvo pašalintas iš proceso lentelės, naujam vaikui nebus priskirtas toks pat identifikavimas (ID) kaip senam vaikui. Tam tikroms programoms toks diferencijavimas gali būti naudingas arba netgi reikalingas.

Jei pirminis procesas neįvykdė komandos laukti, kad gautų zombius, už kuriuos jis atsakingas, gali būti įmanoma priverstinai išspręsti problemą. Paprastai tai atliekama naudojant nužudymo komandą ir siunčiant SIGCHLD signalą pirminiam procesui. Jei viskas veikia tinkamai, pirminis procesas, kuris gauna šį signalą, turėtų gauti savo zombius, kad būtų galima pakartotinai panaudoti jų ID ir proceso lentelės pozicijas.

Tam tikromis aplinkybėmis pirminis procesas gali nepaisyti SIGCHLD signalo. Jei taip nutinka ir operatorius vis tiek nori, kad proceso lentelė būtų išvalyta, pirminis procesas gali būti užmuštas. Tada visi zombiai, kuriuos sukūrė pirminis procesas, bus priskirti pradiniam procesui kaip vaikai. Kadangi init periodiškai inicijuoja laukimo komandą savo vaikams, visi zombiai, už kuriuos ji atsakinga, galiausiai bus pašalinti iš proceso lentelės.