Kas yra "Zombie procesas" Linux?

Turinys:

Kas yra "Zombie procesas" Linux?
Kas yra "Zombie procesas" Linux?

Video: Kas yra "Zombie procesas" Linux?

Video: Kas yra "Zombie procesas" Linux?
Video: FIX The Identity of This Website or the Integrity of this Connection Cannot be Verified - YouTube 2024, Kovas
Anonim
Jei esate "Linux" vartotojas, galbūt matėte zombių procesus, kurie sunaikino jūsų procesų sąrašą. Jūs negalite nužudyti zombių proceso, nes jis jau miręs - kaip tikras zombius.
Jei esate "Linux" vartotojas, galbūt matėte zombių procesus, kurie sunaikino jūsų procesų sąrašą. Jūs negalite nužudyti zombių proceso, nes jis jau miręs - kaip tikras zombius.

Zombiai iš esmės yra likę beveik neveikiančių procesų bitai, kurie nebuvo tinkamai išvalyti. Programa, kuri sukuria zombių procesus, nėra tinkamai užprogramuotas. Programos neturėtų leisti zombių procesams.

Kas yra zombių procesas?

Norint suprasti, kas yra zombių procesas ir kas sukelia zombių procesus, turėsite šiek tiek suprasti, kaip procesai veikia "Linux" sistemoje.

Kai procesas miršta "Linux", tai ne viskas iš karto pašalinamas iš atminties - proceso deskriptorius lieka atmintyje (proceso deskriptorius užima tik mažą atminties kiekį). 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.

Įrankiai, tokie kaip GNOME sistemos monitorius, viršuje komandą ir Ps komanda parodo zombių procesus.

Image
Image

Zombių procesų pavojai

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ų, kurie žlugdo, nėra problema - nors jie rodo klaidą su tėvų procesais jūsų sistemoje.

Image
Image

Atsikratyti zombių procesų

Jūs negalite nužudyti zombių procesų, nes galite sunaikinti normalius procesus su signalu SIGKILL - zombių procesai jau yra mirę. Turėkite omenyje, kad jums 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 siųsti signalą SIGCHLD tėvų procesui. Šis signalas nurodo tėvų procesui vykdyti sistemos skambučių laukimo () ir išvalyti savo zombių vaikus. Siųskite signalą su nužudyti komanda, pakeisdama pid žemiau esančioje komandoje 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 nepadės. 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 sugrąžintų savo zombių vaikus. Įveskite pranešimą apie klaidą, jei jūsų sistemoje programa sukuria zombius.

Rekomenduojamas: