20Aug
Jei esate "Linux" vartotojas, galbūt matėte zombių procesus, kurie yra apsimetę jūsų procesų sąraše. Jūs negalite nužudyti zombių proceso, nes jis jau miręs - kaip tikras zombius."
" zombiai iš esmės yra negyvų procesų likučiai, kurie nebuvo išvalyti tinkamai. Programa, kuri sukuria zombių procesus, nėra tinkamai užprogramuotas. Programos neturėtų leisti zombių procesams.
Image Credit: Daniel Hollister dėl Flickr( Remixed)
Kas yra Zombie procesas?
Kad suprastumėte, koks zombių procesas yra ir kas sukelia zombių procesus, turėsite šiek tiek suprasti, kaip procesai veikia Linux.
Kai procesas miršta "Linux", jis ne viskas iš karto pašalinamas iš atminties - proceso deskriptorius lieka atmintis( proceso deskriptorius užima tik mažą atmintį).Proceso būsena tampa EXIT_ZOMBIE ir proceso tėvas yra informuotas, kad jo vaikas procesas mirė su SIGCHLD signalu. Tada tėvinis procesas turėtų atlikti "wait() " sistemos skambutį, kad būtų galima perskaityti neveikos proceso pabaigos būseną ir kitą informaciją.Tai leidžia tėvų procesui gauti informaciją iš neveikimo proceso. Po to, kai laukiama laukimo() , zombių procesas visiškai pašalinamas iš atminties.
Tai paprastai vyksta labai greitai, todėl nematysite, kaip jūsų sistemoje kaupiasi zombių procesai. Tačiau, jei tėvų procesas nėra tinkamai užprogramuotas ir niekada nekelia skambučių laukti() , jo zombių vaikai prisilies prie atminties, kol jie bus išvalyti.
komunalinės paslaugos, tokios kaip GNOME sistemos monitorius, aukščiausia komanda ir ps komandos ekranas, zombių procesai.
Zombių procesų grėsmės
Zombie procesai nenaudoja jokių sistemos išteklių.(Tiesą sakant, kiekvienas naudoja labai mažą sistemos atminties kiekį, kad išsaugotų proceso deskriptorių.) Tačiau kiekvienas zombių procesas išlaiko savo proceso ID( PID).Linux sistemos turi ribotą proceso ID skaičių - 32767 pagal nutylėjimą 32 bitų sistemose. Jei zombiai kaupiasi labai greitai - pvz., Jei netinkamai programuojama serverio programinė įranga sukuria zombių procesus pagal apkrovą, visas galimų PID rinkinys galiausiai bus priskirti zombių procesams, neleidžiant paleisti kitų procesų.
Tačiau keletas zombių procesų, užkabintų aplink, nėra problema, nors jie rodo klaidą su tėvų procesu jūsų sistemoje.
Zombių procesų atsikratymas
Jūs negalite nužudyti zombių procesų, nes galite sunaikinti normalius procesus su signalu SIGKILL - zombių procesai jau mirę.Turėkite omenyje, kad nereikia atsikratyti zombių procesų, nebent jūsų sistemoje yra didelis kiekis - keli zombiai yra nekenksmingi. Tačiau yra keletas būdų, kaip atsikratyti zombių procesų.
Vienas iš būdų yra išsiųsti signalą SIGCHLD tėvų procesui.Šis signalas nurodo tėvų procesui vykdyti sistemos skambutį() ir išvalyti zombių vaikus. Išsiųskite signalą su , užmuškite komandą, pakeisdami pid žemiau pateiktą komandą su tėvų proceso PID:
kill -s SIGCHLD pid
. Tačiau jei tėvų procesas nėra tinkamai užprogramuotas ir ignoruoja SIGCHLD signalus, tai laimėjot padėti. Turėsite nužudyti ar uždaryti zombių tėvų procesą.Kai procesas, kuris sukūrė zombius, baigiasi, Init paveldi zombių procesus ir tampa jų naujais tėvais.(init yra pirmasis procesas, kuris prasideda Linux paleidžiant ir yra priskirtas PID 1). Init periodiškai vykdo laukimo() sistemos skambutį, kad išvalytų zombių vaikus, todėl init bus trumpas zombių darbas. Galite paleisti tėvų procesą, uždarę jį.
Jei tėvų procesas ir toliau kuria zombius, jis turėtų būti nustatytas taip, kad jis tinkamai paskambintų laukti() , kad galėtų pasimesti savo zombių vaikus.Įveskite pranešimą apie klaidą, jei jūsų sistemoje programa sukuria zombius.