Cum să ucizi procesele zombie pe Linux

Nov 25, 2024
Linux
FatmAwati Achmad Zaenuri / Shutterstock

Programe care sunt slab scrise sau performante pot pleca prost procese zombie ascunzând în interiorul computerului dvs. Linux. Aflați cum sunt create zombi și cum le puteți lăsa în sfârșit să se odihnească.

Cum funcționează statele de proces la Linux

Linux, desigur, trebuie să urmărească toate aplicațiile și daemoanele care rulează pe computer. Una dintre modalitățile de care face acest lucru este prin menținerea tabelului de procesare. Aceasta este o listă de structuri din memoria kernel-ului. Fiecare proces are o intrare în această listă care conține câteva informații despre el.

Nu există o mare afacere în fiecare dintre structurile de masă de proces. Ei dețin ID-ul procesului , câteva alte elemente de date și un indicator la blocul de control al procesului (PCB) pentru acest proces.

Este PCB care deține numeroasele detalii Linux trebuie să privească sau să se stabilească pentru fiecare proces. PCB este actualizat, de asemenea, ca proces, este creat, dat timp de procesare și, în cele din urmă, distrus.

PCB-ul Linux conține peste 95 de câmpuri. Este definită ca o structură numită Task_struct.h. , și este de peste 700 de linii lungi. PCB conține următoarele tipuri de informații:

  • Procesul de stat : Statele sunt descrise mai jos.
  • Numărul procesului : Identificatorul său unic în sistemul de operare.
  • Contor de programe : Când acest proces este următorul acces la CPU, sistemul va folosi această adresă pentru a găsi următoarea instrucțiune a procesului care ar trebui executat.
  • Registre : Lista înregistrărilor CPU utilizate de acest proces. Lista ar putea conține acumulatori, registre index și pointeri de stivă.
  • Deschideți lista de fișiere : Fișiere asociate cu acest proces.
  • Programarea informațiilor CPU : Folosit pentru a determina cât de frecvent și cât timp, timpul de procesare a CPU este acordat acestui proces. Prioritatea procesului, indicii la cozi de programare și alți parametri de planificare trebuie înregistrate în PCB.
  • Informații despre gestionarea memoriei : Detalii despre memorie Acest proces utilizează, cum ar fi adresele de pornire și de capăt ale memoriei procesului și indicatoarele în paginile de memorie.
  • Informații despre statut I / O : Orice dispozitive de intrare sau ieșire utilizate de proces.

"Starea procesului" poate fi oricare dintre următoarele:

  • R: Un proces de funcționare sau rulat. Rularea înseamnă că primește cicluri CPU și execută. Un proces runnable este gata să ruleze și să aștepte un slot CPU.
  • S: Un proces de dormit. Procesul așteaptă ca o acțiune să fie completă, cum ar fi o operație de intrare sau de ieșire sau pentru ca o resursă să devină disponibilă.
  • D: Procesul se află într-o stare de somn neîntreruptibilă. Folosește un apel de blocare a sistemului și nu poate continua până când apelurile sistemului au fost finalizate. Spre deosebire de starea de "somn", un proces în această stare nu va răspunde la semnale până la finalizarea apelului de sistem și execuția a revenit la proces.
  • T: Procesul a terminat (oprit) deoarece a primit Sigstop. semnal. Aceasta va răspunde doar la. Sigkill. sau Sigcont. semnale, care fie ucide procesul, fie instruiți-o să continue, respectiv. Aceasta este ceea ce se întâmplă atunci când schimbați de la prim plan ( FG. ) la fundal ( bg) sarcini.
  • Z: Un proces zombie. Când un proces completează, nu dispare doar. Ea eliberează orice memorie pe care o folosește și se îndepărtează din memorie, dar intrarea sa în tabelul de proces și PCB rămâne. Starea sa este setată la Ieșire_zombie. , iar procesul său părinte este notificat (de către Sigchld. semnal) că procesul copilului a terminat.

În statul zombie, procesul părinte numește unul dintre aștepta() Familiile de funcții când procesul copilului este creat. Apoi așteaptă o schimbare de stat în procesul copilului. Procesul copilului a fost oprit, continuat sau ucis de un semnal? A terminat încheierea prin finalizarea naturală a codului său?

Dacă schimbarea statului este una, ceea ce înseamnă că procesul copilului sa oprit, codul său de ieșire este citit. Apoi, PCB-ul copilului este distrus și intrarea sa în tabelul de proces este eliminată. În mod ideal, toate acestea se întâmplă în clipi de ochi, iar procesele din statul zombie nu există foarte mult timp.

LEGATE DE: Cum se execută și controlează procesele de fundal pe Linux

Ce cauzează procesele zombie pe Linux?

Un proces mamă prost scris ar putea să nu sune aștepta() funcția când este creat procesul pentru copii. Aceasta înseamnă că nimic nu se uită la schimbările de stat în procesul copilului și Sigchld. semnalul va fi ignorat. Sau, probabil, o altă aplicație afectează executarea procesului părinte, fie din cauza programării slabe, fie a intenției rău intenționate.

Cu toate acestea, în cazul în care procesul părinte nu se uită la modificările de stat în procesul copilului, nu va avea loc menajele de sistem adecvate. PCB și intrarea în tabelul de proces nu vor fi eliminate atunci când procesul copilului se termină. Acest lucru are ca rezultat starea zombie care nu au fost niciodată eliminate din PCB.

Zombies folosesc un pic de memorie, dar ei nu prezintă de obicei o problemă. Intrarea în tabelul de proces este mică, dar, până când este eliberat, ID-ul procesului nu poate fi refolosit. Pe un sistem de operare pe 64 de biți, este puțin probabil să provoace probleme, deoarece PCB este mult mai mare decât intrarea tabelului de proces.

Un număr mare de zombi ar putea afecta, în mod evidebil, cantitatea de memorie liberă pentru alte procese. Dacă aveți însă multe zombi, aveți o problemă serioasă cu aplicația parentală sau un bug de sistem de operare.

Cum să eliminați procesele zombie

Nu poți ucide un proces zombie pentru că e deja mort. Nu va răspunde la niciun semnal, deoarece a fost eliminat din memorie - nu există unde să trimiteți a Sigkill. semnal. Puteți încerca să trimiteți Sigchld. Semnal la procesul părinte, dar dacă nu a funcționat când procesul copilului sa terminat, este puțin probabil să lucreze acum.

Singura soluție fiabilă este aceea de a ucide procesul părinte. Când se termină, procesele sale de copil sunt moștenite de către init. Procesul, care este primul proces de funcționare într-un sistem Linux (ID-ul procesului este 1).

În init. Procesul efectuează în mod regulat curățarea necesară a zombiilor, astfel încât să le omorâți, trebuie doar să ucizi procesul care le-a creat. În top Comanda este o modalitate convenabilă de a vedea dacă aveți zombi.

Introduceți următoarele:

  Top  

Acest sistem are opt procese zombie. Noi se poate afișa aceste lucruri Folosind. ps. comanda și tubulându-l Egrep. . Din nou, procesele zombie au un steag de stat de "z" și de obicei veți vedea "defunctul".

Introduceți următoarele:

 PS Aux | egrep "z | defuncct" 

Procesele zombie sunt enumerate.

Aceasta este o modalitate nefavorabilă de a descoperi ID-urile procesului de zombi decât derularea înainte și înapoi top . De asemenea, vedem că o cerere numită "Badprg" a dat naștere acestor zombi.

ID-ul procesului primului zombie este de 7641, dar trebuie să găsim ID-ul procesului procesului părinte. Putem face acest lucru prin utilizarea ps. din nou. Vom folosi opțiunea de ieșire ( -O. ) a spune ps. pentru a afișa numai ID-ul procesului părintelui, apoi transmiteți-l cu ppid =. steag.

Procesul pe care dorim să îl găsim va fi indicat prin utilizarea -p. (Process) opțiune și apoi trecerea în ID-ul procesului Zombie.

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:

 PS -O PPID = -P 7641 

Ni sa spus că ID-ul procesului părinte este de 7636. Acum putem referi acest lucru prin utilizarea ps. inca o data.

Vedem că acest lucru se potrivește cu numele procesului părinte de la mai devreme. Pentru a ucide procesul părinte, utilizați opțiunea Sigkill cu comanda de ucidere după cum urmează:

 Kill -Sigkill 7636 

În funcție de proprietarul procesului părinte, este posibil să fie necesar să utilizați sudo. .

Zombies nu sunt înfricoșătoare ...

... dacă nu se află într-o hoardă masivă. Câteva nu sunt nimic de îngrijorat și o repornire simplă va șterge.

Cu toate acestea, dacă observați că o aplicație sau un proces este întotdeauna zombi de reproducere, asta ar trebui să te uiți. Este cel mai probabil doar un program scris greșit, caz în care, poate că există o versiune actualizată care curăță în mod corespunzător după procesele copilului.


Linux - Cele mai populare articole

Cum de a forța utilizatorii să-și schimbe parolele pe Linux

Linux Nov 4, 2024

Ilia Titchev / Shutterstock Parolele sunt cheia de boltă pentru securitatea contului. Vă vom arăta cum să își reseteze parolele, perioadele de expirare a..


Cum se blochează Mac folosind terminalul

Linux Feb 16, 2025

Unul dintre primele reguli ale securității cyberSecuritate este de a bloca întotdeauna computerul înainte de a ieși din acesta. Deși s-ar putea să nu fie cea mai rapidă modalitat..


Cum se utilizează Expansiunea Brace în cochilia de bash a lui Linux

Linux May 12, 2025

FatmAwati Achmad Zaenuri / Shutterstock Extinderea brațului este o tehnică utilă pentru a genera liste de șiruri care pot fi utilizate în scripturi și al..


Cele 6 cele mai bune districte Linux Linux

Linux Jul 27, 2025

3DMI / Shutterstock.com. Dacă computerul Windows sau Mac este vechi și se luptă pentru a ține pasul, instalarea Linux poate da o leasing proaspăt de viaț..


5 Distribuții Specializate Linux cu caracteristici unice

Linux Jul 20, 2025

Citirea prin intermediul listei de cartoon "de distrouri Linux existente, arome de diverse și lăstarii de pe jos, toate încep să rănească împreună. Pentru a remedia acest lucru, am..


Cum să Actualizare Ubuntu Linux

Linux Aug 27, 2025

Tomeqs / Shutterstock.com. Aveți nevoie de cele mai recente și mai mari în software-ul Ubuntu? Nu trebuie să fii un Linux Pro. Citiți mai departe pentru..


Cum să descărcați și să instalați Steam pe Linux

Linux Oct 9, 2025

Studio postmodern / Shutterstock.com Deci, vrei să încerci jocurile Linux. ? În acest articol, să ne uităm la modul de instalare a Steam pe ori..


Ce este nou în Ubuntu 21.10 "IMPISH INDRI"

Linux Oct 14, 2025

Canonic Ubuntu 21.10 "IMPISH INDRI" a fost eliberată La 14 octombrie 2021. Funcționează Gnome 40. , un nou kernel și aplicații actuali..


Categorii