20Aug

Mis on Linuxis "zombie protsess"?

Kui olete Linuxi kasutaja, võite olla näinud oma protsesside loendis olevat zombieprotsesse. Sa ei saa zombie protsessi tappa, sest see on juba surnud - nagu tegelik zombie.

Zombies on põhiliselt surnud protsessid, mida pole korralikult puhastatud. Programm, mis loob zombieprotsesse, ei ole korralikult programmeeritud - programmid ei tohiks lubada zombie protsesse kinni hoida.

Image Credit: Daniel Hollister Flickril( Remixed)

Mis on zombie protsess?

Et mõista, mis zombie protsess on ja mis põhjustab zombie protsesside ilmumist, peate mõnevõrra aru saama, kuidas protsessid Linuxis töötavad.

Kui protsess langeb Linuxile, siis ei eemaldata seda kohe mälust - protsessi deskriptor jääb mällu( protsessi deskriptor võtab vaid väikese mälu).Protsessi olek muutub EXIT_ZOMBIEks ja protsessi vanemt teavitatakse, et tema lapseprotsess on surnud SIGCHLD-signaaliga. Seejärel peab vanemprotsess käivitama ootama() süsteemikõnet, et lugeda surnud protsessi lõpetamise olekut ja muud teavet. See võimaldab vanemprotsessil saada teavet surnud protsessist. Pärast ootamist() kutsutakse zombie protsess täielikult mälust välja.

See juhtub tavaliselt väga kiiresti, nii et te ei näe oma süsteemis akumuleerivaid zombieprotsesse. Kui aga vanemprotsess pole korralikult programmeeritud ja kunagi ei helise oodata() , siis tema zombie lapsed mäletavad mälu kuni nende puhastamiseni.

utiliidid nagu GNOME süsteemi monitor, ülemine käsk ja ps käsu kuvamine zombie protsessid.

Zombie protsesside ohud

Zombie protsessid ei kasuta ühtegi süsteemi ressursse.(Tegelikult kasutab iga protsessi deskriptori salvestamiseks väga väikest süsteemi mälu). Kuid iga zombie protsess säilitab oma protsessi ID( PID).Linuxi süsteemidel on piiratud arv protsesside ID-sid - 32767 vaikimisi 32-bitistel süsteemidel. Kui zombid kogunevad väga kiirel kiirusel - näiteks kui ebakorrektselt programmeeritud serveritarkvara loob zombie protsessid koormusena - kogu olemasolevate PID-ide kogum hakkab lõpuks ometi pandud zombie protsessidele, mis takistab teiste protsesside käivitamist.

Kuid mõned zombie protsessid, mis rippuvad, pole probleemiks - kuigi need näitavad teie süsteemis oleva vanemprotsessi veaga.

Zombie protsesside lahtiütlemine

Sa ei saa tappa zombie protsesse, sest võite SIGKILLi signaaliga tappa tavapäraseid protsesse - zombie protsessid on juba surnud. Pidage meeles, et sa ei pea vabaneda zombie protsessidest, kui sul pole oma süsteemis suurt kogust - mõned zombid on ohutud. Siiski on zombieprotsessidest vabanemiseks mõned võimalused.

Üks viis on saata SIGCHLD-i signaal vanemprotsessile. See signaal räägib vanemprotsessile, et käivitada ootama() süsteemi kõne ja puhastada oma zombie lapsed. Saatke signaal -ga, kustutage käsk, asendades pid alltoodud käsuga vanemprotsessi PID:

kill -s SIGCHLD pid

-ga. Kui aga vanemprotsess ei ole korralikult programmeeritud ja ignoreerib SIGCHLD-signaale, võitis seeei aita. Sa pead tapma või sulgema zombie vanemprotsessi. Kui protsess, mis lõi zombisid, lõpeb, init pärib zombieprotsesse ja saab nende uueks vanaks.(init on esimene käivitamisel Linuxi algupärane protsess ja see on määratud PID 1-s). Init käivitab korrapäraselt zombie lapsi puhastamiseks ootama() süsteemikõnet, nii et init muudab zombisid lühikeseks ajaks. Pärast selle sulgemist saate vanemprotsessi taaskäivitada.

Kui vanemprotsess jätkuvalt loob zombisid, tuleb see fikseerida nii, et see õigesti kutsub üles ootama oma zombie lapsi. Kui teie süsteemi programm loob zombisid, esitage veaaruanne.