Mis on Linuxis "zombie protsess"?

Sisukord:

Mis on Linuxis "zombie protsess"?
Mis on Linuxis "zombie protsess"?
Anonim
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.
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.

Zombid on põhimõtteliselt surnud protsessid, mida ei ole korrektselt puhastatud. Programm, mis loob zombieprotsesse, ei ole korralikult programmeeritud - programmid ei tohiks lubada zombie protsesse kinni hoida.

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 sureb Linuxis, ei eemaldata seda kohe mälestusest kohe - 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 System Monitor, üleval käsu ja ps käsk näitab zombie protsesse.

Image
Image

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õni zombie protsess, mis ripub ümber, ei ole probleem - kuigi see näitab teie süsteemis oleva vanemprotsessi veaga.

Image
Image

Zombie protsesside vältimine

Sa ei saa tappa zombie protsesse, sest SIGKILLi signaali abil saate tavalisi protsesse tappa - 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 võimalus on saata SIGCHLD-signaal vanemprotsessile. See signaal ütleb vanemprotsessile, et käivitada ootama () süsteemi kõne ja puhastada oma zombie lapsed. Saada signaal tappa käsk asendades pid allpool olevas käsus vanemprotsessi PID:

kill -s SIGCHLD pid

Kui aga vanemprotsess ei ole korralikult programmeeritud ja ignoreerib SIGCHLD signaale, ei aita see siiski. 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.

Soovitan: