Jak zabít běžících procesů v systému Linux

Nov 25, 2025
Linux
FATMAWATI ACHMAD ZAENURI / Shutterstock

Programy, které jsou špatně napsané nebo vystupující špatně mohou odejít Zombie procesy Currking uvnitř počítače Linuxu. Zjistěte si, jak jsou vytvořeny zombie a jak je můžete konečně položit k odpočinku.

Jak fungují procesní stavy na Linuxu

Linux, samozřejmě, musí sledovat všechny aplikace a démony běžící v počítači. Jedním ze způsobů, jak to dělá, je udržováním procesní tabulky. Jedná se o seznam struktur v paměti jádra. Každý proces má záznam v tomto seznamu, který obsahuje některé informace o tom.

V každém z konstrukcí procesních tabulek není velký problém. Drží ID procesu , několik dalších datových položek a ukazatel na řídicí blok procesu (PCB) pro tento proces.

Je to PCB, který drží mnoho podrobností Linux musí vyhledat nebo nastavit pro každý proces. PCB je také aktualizován jako proces byl vytvořen, daný čas zpracování a nakonec zničen.

PCB Linux obsahuje přes 95 polí. Je to definováno Jak se nazývá struktura task_struct.h. a je to více než 700 řádků. PCB obsahuje následující typy informací:

  • Proces procesu : Státy jsou popsány níže.
  • Číslo procesu : Jeho jedinečný identifikátor v operačním systému.
  • Program Counter. : Pokud je tento proces příští přístup k CPU, systém použije tuto adresu, aby našel další instrukce procesu, který by měl být proveden.
  • Registry : Seznam registrů CPU používaných tímto procesem. Seznam může obsahovat akumulátory, rejstříky indexu a ukazatele zásobníku.
  • Otevřete seznam souborů : Soubory spojené s tímto procesem.
  • Informace o plánování CPU : Používá se k určení, jak často, a jak dlouho se tento proces uděluje doba zpracování CPU. Prioritou procesu, ukazatele k plánování fronty a další parametry plánování musí být zaznamenány v PCB.
  • Informace o správě paměti : Podrobnosti o paměti Tento proces používá, například adresy start a koncových adres paměti procesu a ukazatele na stránky paměti.
  • Informace o stavu I / O : Jakákoli in-nebo výstupní zařízení používaná způsobem.

"Procesový stav" může být některý z následujících možností:

  • R: Běh nebo runnable proces. Běh znamená, že přijímá cykly CPU a provádění. Runnable proces je připraven běžet a čekat na slot CPU.
  • S: Proces spaní. Proces čeká na dokončení akce, jako je například in- nebo výstupní operace, nebo pro zdroj, který má být k dispozici.
  • D: Proces je v nepřerušitelném stavu spánku. Používá volání blokování systému a nemůže pokračovat, dokud systémové hovory nedokončí. Na rozdíl od stavu spánku "proces v tomto stavu nebude reagovat na signály, dokud nebude systémové volání dokončeno a provedení se vrátilo do procesu.
  • T: Proces ukončil (zastaven), protože přijal Sigstop. signál. To bude pouze reagovat na Sigkill. nebo Sigcont. Signály, které buď zabijí proces nebo instruují, aby pokračovaly, resp. To je to, co se děje, když vyměňujete popředí ( fg. ) na Pozadí ( bg) úkoly.
  • Z: Proces zombie. Když proces dokončí, to prostě nezmizí. Uvolňuje jakoukoliv paměť, kterou používá a odstraňuje se z paměti, ale jeho vstup do tabulky procesu a PCB zůstane. Jeho stát je nastaven na Exit_zombie. a jeho mateřský proces je oznámen (podle Sigchld. Signál), že proces dítěte skončil.

Ve stavu zombie, mateřský proces volá jeden z Počkejte() rodiny funkcí při vytváření procesu dítěte. Poté čeká na změnu státu v procesu dítěte. Byl proces dítěte zastaven, pokračoval nebo zabil signálem? Ukončila to tím, že běží při přirozeném dokončení svého kodexu?

Pokud je změna stavu, což znamená, že proces dítěte přestal spustit, jeho výstupní kód je čten. Poté je Dětský PCB zničen a jeho vstup do tabulky procesu je odstraněn. V ideálním případě se to všechno děje v mrknutí oka a procesy v zombie státu neexistují velmi dlouho.

PŘÍBUZNÝ: Jak spustit a ovládat procesy pozadí na Linuxu

Co způsobuje procesy zombie na Linuxu?

Špatně písemný mateřský proces nemusí volat Počkejte() funkce při vytváření procesu dítěte. To znamená, že nic není sledováním změn stavu v dětském procesu a Sigchld. Signál bude ignorován. Nebo snad další aplikace ovlivňuje provádění rodičovského procesu, a to buď v důsledku špatného programování nebo škodlivého záměru.

Pokud se však rodičovský proces nesleduje změny stavu v podřízeném procesu, náleží správný systém úklidu. PCB a položka v tabulce procesu nebudou odstraněny, když se podřízený proces ukončí. Výsledkem je zombie stát nikdy odstraněn z PCB.

Zombie používají trochu paměti, ale obvykle nepředstavují problém. Záznam v tabulce procesu je malý, ale dokud není vydán, ID procesu nelze znovu použít. Na 64bitovém operačním systému, to je nepravděpodobné, že by způsobilo jakékoli problémy, protože PCB je mnohem větší než položka tabulky procesu.

Obrovské množství zombie by mohlo být možné, ovlivnit množství paměti, která je zdarma pro jiné procesy. Pokud máte mnoho zombie, máte vážný problém s nadřazenou aplikací nebo chybou operačního systému.

Jak odstranit procesy zombie

Nemůžete zabít proces zombie, protože je už mrtvý. Nebude reagovat na žádné signály, protože je odstraněno z paměti - není nikde k odeslání Sigkill. signál. Můžete vyzkoušet odeslání Sigchld. Signál do rodičovského procesu, ale pokud to nefungovalo, když se dítě ukončil, je nepravděpodobné, že by to fungovalo.

Jediným spolehlivým řešením je zabít mateřský proces. Když je ukončeno, jeho podřízené procesy jsou zděděny init Proces, který je prvním procesem spuštění v systému Linux (jeho ID procesu je 1).

. \ T init Proces pravidelně provádí potřebné vyčištění zombie, takže je zabít, prostě musíte zabít proces, který je vytvořil. . \ T horní Příkaz je pohodlný způsob, jak zjistit, zda máte nějaké zombie.

Zadejte následující:

  Top  

Tento systém má osm zombie procesů. My Může seznamovat pomocí ps. příkaz a potrubí egrep. . Zombie procesy mají opět státní vlajka "Z," a obvykle uvidíte také "Defunct".

Zadejte následující:

 PS AUX | EGREP "z | Z | Z | Defunct" 

Procesy zombie jsou uvedeny.

Jedná se o místo, jak objevit ID procesu zombie než rolování tam a zpět horní . Vidíme také, že aplikace s názvem "Badprg" tyto zombie plodila.

Procesní ID prvního zombie je 7641, ale musíme najít ID procesu jeho rodičovství. Můžeme tak učinit pomocí ps. znovu. Budeme používat možnost výstupu ( ) říct ps. Chcete-li zobrazit pouze ID procesu rodiče a pak jej předejte PPID = vlajka.

Proces, který chceme najít, bude indikován pomocí -p. (Process) a pak projíždění ID procesu Zombie.

Z tohoto důvodu zadáváme následující příkaz k vyhledání informací o procesu pro proces 7641, ale oznámí pouze ID rodičovského procesu:

 PS -O PPID = -P 7641 

Řekli jsme, že ID mateřského procesu je 7636. Můžeme to nyní křížové odkazy pomocí ps. ještě jednou.

Vidíme to odpovídá názvu nadřazeného procesu z dřívějška. Zabít nadřazený proces, použijte volbu SIGKILL s příkazem kill takto:

 zabít -SIGKILL 7636 

V závislosti na vlastníkovi nadřazeného procesu, budete možná muset použít sudo .

Zombies Nejsou Scary ...

... pokud jsou v masivní horda. Několik nejsou čeho bát a jednoduchým restartu bude vyhladit.

Nicméně, pokud si všimnete, že aplikace nebo proces je vždy plodit zombie, to je něco, co byste se měli podívat do. Je to s největší pravděpodobností jen nedbale napsaný program v tom případě, možná tam je aktualizovaná verze, která řádně uklidí po jeho podřízených procesů.


Linux - Nejoblíbenější články

Jak najít a odstranit Broken symbolických odkazů v systému Linux

Linux Nov 12, 2025

FATMAWATI ACHMAD ZAENURI / Shutterstock Symbolické odkazy na Linuxu jsou fantastická funkce, ale mohou se zlomit a levý ukazuje na nic. Zde je, jak najít..


5 Specializované distribuce Linuxu s unikátními funkcemi

Linux Jul 20, 2025

Čtení přes Cartoon Younly Dlouhý seznam stávajících distrů Linuxu, různé příchutě a off-výhonky off-výhonků začnou rozostřit společně. K nápravě, že jsme shromáždi..


Jak používat fsck příkaz pro Linux

Linux Aug 18, 2025

Pixza Studio / Shutterstock Všechny naše důležitých dat sedí v souborovém systému jednoho druhu nebo jiný, a problémy souborového systému jsou nevy..


Jak se odhlásit z MAC pomocí terminálu

Linux Aug 8, 2025

Apple usnadňuje odhlášení z MAC s možností v panelu menu ploše. Existuje však také pár příkazů, které můžete použít k odhlášení pomocí terminálu, jak budeme objevo..


KDE Connect konečně přichází na iPhone

Linux Oct 26, 2025

KDE. Pokud hledáte snadný způsob, jak si svůj iPhone hrát pěkný s vaším Desktop KDE. , dnes je váš šťastný den KDE Connect je konečně k d..


Tento nový Linux herní notebook má specifikace pro spuštění cokoliv

Linux Oct 20, 2025

Juno počítače Linux a hraní se začínají spojit mnohem více v poslední době. . \ T Parní deck je na cestě s nainstalovanou Linuxem a Juno právě ..


Jak spláchnout DNS v Linuxu

Linux Nov 14, 2025

Je váš zážitek z procházení na internetu pomalý na vašem zařízení Linux, nebo jsou webové stránky, které navštěvujete zastaralé nebo nesprávný web? Pojďme diskutovat o splá..


Jak nastavit statickou IP adresu v Ubuntu

Linux Oct 17, 2025

Vaše domácí síť se spoléhá na IP adresy pro směrování dat mezi zařízeními a někdy na opětovné připojení k síti se může změnit adresa zařízení. Zde je návod, jak dát p..


Kategorie