Cum să ucizi procesele zombie pe Linux
Fatmawati Achmad Zaenuri/Shutterstock
Programele care sunt scrise prost sau care funcționează prost pot pleca procese zombie pândind în interiorul computerului tău Linux. Aflați cum sunt creați zombii și cum îi puteți odihni în cele din urmă.
Cum funcționează statele de proces pe Linux
Linux, desigur, trebuie să urmărească toate aplicațiile și demonii care rulează pe computerul tău. Una dintre modalitățile prin care face acest lucru este prin menținerea tabelului de proces. Aceasta este o listă de structuri din memoria kernelului. Fiecare proces are o intrare în această listă care conține câteva informații despre acesta.
Nu există mare lucru în fiecare dintre structurile tabelului de proces. Ei țin ID proces , alte câteva elemente de date și un indicator către blocul de control al procesului (PCB) pentru acel proces.
Este PCB-ul care deține multe detalii pe care Linux trebuie să le caute sau să le stabilească pentru fiecare proces. PCB-ul este, de asemenea, actualizat pe măsură ce se creează un proces, se acordă timp de procesare și, în final, este distrus.
PCB-ul Linux conține peste 95 de câmpuri. Este definit ca o structură numită |_+_| și are peste 700 de linii. PCB-ul conține următoarele tipuri de informații:
- & rsaquo; Cele mai bune distribuții Linux fără systemd
- › Funcții vs. Formule în Microsoft Excel: Care este diferența?
- › Folderul computerului este 40: Cum a creat Xerox Star desktop-ul
- › 5 site-uri web pe care fiecare utilizator Linux ar trebui să le marcheze
- & rsaquo; Cyber Monday 2021: Cele mai bune oferte tehnice
- & rsaquo; Cyber Monday 2021: Cele mai bune oferte Apple
- › Cum să-ți găsești Spotify Wrapped 2021
Starea procesului poate fi oricare dintre următoarele:
În starea Zombie, procesul părinte apelează unul dintre |_+_| familii de funcţii când este creat procesul copil. Apoi așteaptă o schimbare de stare a procesului copil. Procesul copil a fost oprit, continuat sau ucis de un semnal? S-a terminat prin trecerea la finalizarea firească a codului său?
Dacă schimbarea stării este una care înseamnă că procesul copil a încetat să ruleze, este citit codul său de ieșire. Apoi, PCB-ul copilului este distrus și intrarea lui în tabelul de proces este eliminată. În mod ideal, toate acestea se întâmplă într-o clipă, iar procesele în starea zombie nu există pentru foarte mult timp.
LEGATE DE: Cum să rulați și să controlați procesele de fundal pe Linux
Ce cauzează procesele zombie pe Linux?
Un proces părinte scris prost ar putea să nu apeleze |_+_| funcția atunci când este creat procesul copil. Aceasta înseamnă că nimic nu urmărește schimbările de stare în procesul copil și |_+_| semnalul va fi ignorat. Sau, poate că o altă aplicație afectează execuția procesului părinte, fie din cauza programării proaste, fie din cauza intenției rău intenționate.
Cu toate acestea, dacă procesul părinte nu urmărește schimbările de stare în procesul copil, întreținerea corectă a sistemului nu va avea loc. PCB-ul și intrarea din tabelul de procese nu vor fi eliminate când procesul copil se încheie. Acest lucru duce la faptul că starea zombie nu este niciodată eliminată din PCB.
Zombii folosesc un pic de memorie, dar de obicei nu reprezintă o problemă. Intrarea în tabelul de proces este mică, dar, până când este eliberată, ID-ul procesului nu poate fi reutilizat. Pe un sistem de operare pe 64 de biți, este puțin probabil să provoace probleme, deoarece PCB-ul este mult mai mare decât intrarea în tabelul de proces.
Un număr mare de zombi ar putea, probabil, să afecteze cantitatea de memorie care este liberă pentru alte procese. Dacă aveți atât de mulți zombi, totuși, aveți o problemă serioasă cu aplicația părinte sau cu o eroare a sistemului de operare.
Cum să eliminați procesele zombie
Nu poți ucide un proces zombi pentru că este deja mort. Nu va răspunde la niciun semnal deoarece a fost eliminat din memorie — nu există unde să trimită un |_+_| semnal. Puteți încerca să trimiteți |_+_| semnal către procesul părinte, dar dacă nu a funcționat când procesul copil sa încheiat, este puțin probabil să funcționeze nici acum.
PublicitateSingura soluție de încredere este să omorâți procesul părinte. Când este terminat, procesele sale secundare sunt moștenite de |_+_| proces, care este primul proces care rulează într-un sistem Linux (ID-ul său de proces este 1).
|_+_| Procesul efectuează în mod regulat curățarea necesară de zombi, așa că pentru a-i ucide, trebuie doar să ucizi procesul care i-a creat. |_+_| comanda este o modalitate convenabilă de a vedea dacă aveți zombi.
Introduceți următoarele:
task_struct.h
Acest sistem are opt procese zombie. Noi pot enumera acestea folosind |_+_| comanda și introducându-l în |_+_|. Din nou, procesele zombie au un steag de stat Z și, de obicei, veți vedea și dispariți.
Introduceți următoarele:
SIGSTOP
Procesele zombie sunt enumerate.
Aceasta este o modalitate mai ordonată de a descoperi ID-urile de proces ale zombilor decât derularea înainte și înapoi prin |_+_|. De asemenea, vedem că o aplicație numită badprg a dat naștere acestor zombi.
ID-ul de proces al primului zombi este 7641, dar trebuie să găsim ID-ul procesului al procesului părinte. Putem face acest lucru folosind |_+_|din nou. Vom folosi opțiunea de ieșire (|_+_|) pentru a spune |_+_| pentru a afișa numai ID-ul de proces al părintelui, apoi transmiteți-l cu |_+_| steag.
PublicitateProcesul pe care vrem să-l găsim va fi indicat prin utilizarea |_+_| (proces), apoi transmiteți ID-ul de proces al zombiului.
Prin urmare, introducem următoarea comandă pentru a căuta informațiile despre proces pentru procesul 7641, dar va raporta doar ID-ul procesului părinte:
SIGKILL
Ni sa spus că ID-ul procesului părinte este 7636. Acum putem face referințe încrucișate folosind |_+_| inca o data.
Vedem că acesta se potrivește cu numele procesului părinte de mai devreme. Pentru a opri procesul părinte, utilizați opțiunea SIGKILL cu comanda kill după cum urmează:
SIGCONT
În funcție de proprietarul procesului părinte, ar putea fi necesar să utilizați și |_+_|.
Zombii nu sunt înfricoșători...
... cu excepția cazului în care sunt într-o hoardă masivă. Câteva nu sunt de ce să vă faceți griji și o simplă repornire le va șterge.
PublicitateCu toate acestea, dacă observați că o aplicație sau un proces generează întotdeauna zombi, ar trebui să vă uitați la asta. Cel mai probabil este doar un program scris neglijent, caz în care, poate că există o versiune actualizată care se curăță în mod corespunzător după procesele sale secundare.
CITEȘTE URMĂTORULDave McKay a folosit pentru prima dată computerele când banda de hârtie perforată era în vogă și de atunci programează. După peste 30 de ani în industria IT, acum este jurnalist de tehnologie cu normă întreagă. De-a lungul carierei sale, a lucrat ca programator independent, manager al unei echipe internaționale de dezvoltare de software, manager de proiect pentru servicii IT și, cel mai recent, responsabil cu protecția datelor. Scrisul său a fost publicat de howtogeek.com, cloudsavvyit.com, itenterpriser.com și opensource.com. Dave este un evanghelist Linux și un avocat open source.
Citiți biografia completă