Procesul zombie. Nu toată lumea a auzit de acest cuvânt interesant, dar înfricoșător, legat de sistemul de operare Linux. Pe un computer personal, procesele zombie ar putea să nu reprezinte o amenințare pentru un utilizator obișnuit, dar când vine vorba de servere Linux, aceste procese trebuie identificate și oprite.
Astfel de procese pot cauza probleme cu tabelul de procese al sistemului și, la rândul său, pot afecta funcționarea corectă a mașinii. Prin urmare, în acest articol, vom discuta în detaliu despre procesele zombie, împreună cu un ghid cuprinzător despre găsirea și uciderea proceselor zombie pe o mașină Linux.
Ce sunt procesele zombie?
Dar înainte de toate acestea, este important să știți ce sunt procesele zombie. Acestea nu sunt altceva decât procese moarte și defuncte care ocupă spațiu pe masa proceselor de sistem. A bloc de control al procesului sau PCB este o structură de date care stochează detalii asociate proceselor individuale care rulează pe sistemul dvs.
Tabelul de proces constă din ID-ul procesului, un link către PCB și alte informații utile legate de proces. Procesele zombie au propriile ID-uri de proces și informații de gestionare a memoriei. Deoarece sistemul de operare Linux are un număr limitat de ID-uri de proces disponibile, alte procese nu pot utiliza PID-urile până când procesul zombie nu se oprește.
Deși unul sau două procese zombie nu vor cauza probleme de performanță sau de întrerupere pe computerul dvs., a un număr mare de astfel de procese pot dăuna fluxului de lucru al sistemului dvs. prin inundarea tabelului de proces și a resurse.
Ce cauzează procesele zombie pe Linux?
Pentru a înțelege în detaliu cauza care stă la baza unui proces zombie, va trebui să aflați cum încep și se opresc procesele în Linux. Sistemul de operare Linux monitorizează toate procesele și demonii care rulează pe un computer. tabel de proces este o listă de structuri care conține toate procesele care rulează în prezent pe mașina dvs.
Fiecare intrare de proces din tabelul de proces constă dintr-un link către bloc de control al procesului a acelui proces specific. PCB stochează detaliile asociate procesului respectiv. Aceste detalii includ:
- Starea procesului: Starea actuală a procesului
- Numărul procesului: Un număr unic utilizat pentru identificarea procesului
- Contor de programe: Conține informații legate de următoarea instrucțiune
- Registrele: Lista tuturor registrelor CPU utilizate de proces
- Deschideți lista de fișiere: Fișiere utilizate de proces
- Informații despre programarea procesorului: Conține informații asociate cu timpul CPU și resursele alocate procesului
- Informații despre gestionarea memoriei: Include detalii despre cantitatea de memorie utilizată de proces
- Informații I / O: Lista dispozitivelor de intrare sau ieșire utilizate de proces
Linux folosește următoarele stări de proces pentru a descrie toate procesele sale.
- R: Procesul de rulare
- S: Proces de somn
- D: Proces de somn neîntrerupt
- T: Proces încheiat
- Z: Proces zombie
Ori de câte ori un proces finalizează sarcina atribuită, starea procesului său este setată ca Zombie sau Z. Fiecare proces are un proces părinte care numește o familie de funcții aștepta() care așteaptă schimbarea de stare a unui proces. De exemplu, dacă starea procesului se schimbă din Alergare la Zombie, aștepta() metoda va fi declanșată.
aștepta() metoda șterge de obicei blocul de control al procesului legat de acel proces zombie și apoi elimină intrarea acelui proces din tabelul de proces.
Dar uneori, din cauza dezvoltării slabe a unui program, procesul părinte nu apelează la aștepta() funcţie. Și, ca rezultat, sistemul nu șterge PCB-ul procesului zombie. Intrarea în tabelul de proces pentru acel proces specific rămâne, de asemenea, intactă.
Acest lucru oferă procesului zombie o durată de viață infinită. Deoarece sistemul nu poate distruge procesul, intrarea procesului nu este ștearsă niciodată, iar PID nu se eliberează niciodată.
Aflați mai multe: Modalități de a ucide programele care nu răspund în Linux
Cum se găsesc procese Zombie?
Primul pas pentru eliminarea proceselor zombie de pe sistemul dvs. este analizarea procesului care are Zombie starea procesului. Deși nu veți putea ucide aceste procese direct, deoarece sistemul le-a eliminat deja din memorie, puteți ucide procesul părinte asociat acestora.
Mai întâi, trebuie să verificați dacă tabelul de proces al sistemului dvs. are un proces zombie. Puteți face acest lucru cu ușurință folosind top comanda. Pur și simplu deschideți terminalul și tastați:
top
Veți vedea o ieșire similară cu aceasta. Observați numărul proceselor de zombi în partea de sus a ferestrei terminalului. Dacă ieșirea este zero, atunci nu aveți de ce să vă faceți griji.
Puteți lista informații legate de aceste procese zombie prin conducte comanda ps cu egrep. Egrep este o extensie a comenzii grep din Linux care tratează toate tiparele ca un șir regex extins.
Legate de: Ghidul pentru începători pentru expresii regulate cu Python
Tastați următoarea comandă pentru a enumera toate procesele zombie:
ps aux | egrep "Z | defunct"
Comanda menționată mai sus va căuta liniile care conțin oricare Z sau defunct în ieșirea generată de comanda ps. Ieșirea constă dintr-o listă a proceselor zombie care rulează pe sistemul dvs.
Uciderea proceselor zombie folosind comanda kill
Acum, că știi ce procese zombie îți consumă resursele sistemului, este timpul să ucizi aceste procese.
În timp ce cel mai simplu mod de a ucide procesele de zombi este prin repornirea computerului, uneori aceasta nu este o opțiune fezabilă, mai ales dacă administrați un server.
Pentru a ucide procesele zombie fără a închide serverul, notați ID-ul procesului oricărui proces zombie. Din secțiunea anterioară, putem vedea că PID al procesului zombie a fost 18614. Apoi, utilizați acest PID pentru a găsi ID-ul procesului părinte.
ps -o ppid = -p 18614
Ieșire:
18613
Verificați dacă ID-ul procesului părinte există folosind ps comanda.
ps -e | grep 18613
Acum, că am confirmat existența procesului părinte, este timpul să-l ucidem. Treceți -SIGKILL steag cu ucide comandați după cum urmează:
sudo kill -SIGKILL 18613
Odată ce ați ucis procesul părinte, sistemul va șterge procesul zombie și îl va elimina automat din tabelul de proces.
Gestionarea eficientă a proceselor pe Linux
Fiecare administrator de sistem trebuie să acorde prioritate proceselor de monitorizare care rulează pe o mașină Linux. Deși procesele zombie nu sunt neapărat dăunătoare sistemului dvs., ele pot cauza probleme de performanță dacă există într-un număr mare.
Dacă sunteți un utilizator Linux începător și nu aveți nicio idee despre modul în care sistemul de operare Linux gestionează procesele, învățarea care sunt procesele mai întâi este un loc bun pentru a începe.
Înțelegerea procesului și a locurilor de muncă este un aspect cheie pentru a ajunge la Linux. Iată ce trebuie să știți.
Citiți în continuare
- Linux
- Linux
- Prelucrare
Deepesh este Junior Editor pentru Linux la MUO. Scrie conținut informațional pe internet de peste 3 ani. În timpul liber, îi place să scrie, să asculte muzică și să cânte la chitară.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Încă un pas…!
Vă rugăm să confirmați adresa de e-mail în e-mailul pe care tocmai vi l-am trimis.