GNU/Linux >> Znalost Linux >  >> Linux

Jak zabít nebo ukončit proces Linux:The Ultimate Guide

Operační systémy s více zpracováním, jako je Linux a BSD, využívají několik metod pro maximalizaci využití CPU. Proces je jednoduše spuštěný program. Vzhledem k tomu, že v daný čas bude běžet více než jeden linuxový proces, je řízení procesů v Linuxu nesmírně důležité. Uživatelé se často potýkají s problémy, jako je omezení zdrojů CPU, když spouští příliš mnoho programů. Situace, jako je tato, nastanou, když CPU nezvládne rostoucí počet procesů. I když to nezávisí zcela na výkonu vašeho CPU, může být jednání se zavěšenými nebo zombie procesy docela frustrující. Abychom vám pomohli zmírnit tyto jevy, nastíníme některé standardní způsoby, jak tyto procesy zabíjet.

Ovládněte Unresponsive Process Management v Linuxu

Naučíte se několik způsobů, jak ukončit proces Linuxu, který vůbec nereaguje. Pokud přicházíte z Windows, možná znáte Ctrl+Alt+Delete. Podobně uživatelé počítačů Mac používají metodu Command+Option+Escape pro zabíjení zmrazených procesů. Linux je mnohem všestrannější než jeho protějšky a nabízí více než jednu metodu pro řešení mrtvých/nereagujících procesů.

Různé metody, jak zabít mrtvý proces Linuxu

Nastíníme především dvě metody pro zabíjení zombie procesů. Pro první metodu použijeme terminál Linux. K tomu musíme nejprve identifikovat ID procesu. Po úspěšném získání můžeme tento PID použít k ukončení programu odesláním specifických signálů do tohoto PID.

Dozvíte se také, jak provádět takovéto linuxové kill joby z grafického uživatelského rozhraní nebo z X okna. Využijeme „Monitor systému“ aplikace dostupná v Ubuntu. Přestože se jedná o aplikaci GNOME, podobné nástroje jsou dostupné i pro jiná prostředí Linuxu.

Ukončete nereagující proces z příkazového řádku

Existuje několik nástrojů pro ukončení nereagujícího nebo pozastaveného procesu z příkazového řádku, včetně kill , pkill a zabít . Tyto příkazy fungují tak, že odesílají specifické signály těmto nereagujícím procesům. Budete potřebovat ID procesu nebo PID informace, abyste jim mohli poslat požadovaný ukončovací signál.

PID nebo id procesu je jedinečné číslo, které identifikuje proces. Ty jsou vytvářeny linuxovým jádrem za běhu a plánovač procesů řídí jejich aktivity CPU. Kdykoli tedy vyvoláte aplikaci, jádro nejprve vytvoří potřebné procesy a přiřadí jim tyto jedinečné hodnoty PID. Procesu může být přiřazeno více PID. Každý proces má navíc jeden nadřazený proces s jedinečným PPID (Parent Process ID).

Pokud tedy můžete zjistit toto PPID, budete moci odeslat signál zabíjení pomocí programů určených pro tento účel. Níže se dozvíte, jak zkontrolovat běžící procesy v Linuxu a identifikovat jejich PPID z terminálu.

Zjistěte informace o PPID

--

PPID procesu můžete zjistit pomocí několika příkazů správy procesů v Linuxu, jako je pidof , pstree a pgrep . Pojďme je jeden po druhém prozkoumat a uvidíme, jak získat PID linuxového procesu.

Metoda 1:Použití příkazu ps

Příkaz ps v Linuxu zobrazuje všechny běžící procesy spolu s dalšími informacemi souvisejícími s procesy, jako je PID v terminálu. Tento příkaz můžeme použít k vypsání všech procesů a poté odfiltrovat konkrétní proces pomocí příkazů Linux grep. Měl by nám ukázat informace o ID procesu, které nás zajímají.

$ nano> /dev/null &
$ ps aux | grep "nano"

Nejprve jsme na pozadí spustili textový editor Linux. Poté jsme spolu s příkazem grep použili příkaz ps, abychom zjistili PPID tohoto editoru. Výstup může obsahovat několik ID procesů, ale nás zajímá pouze to první, protože to je naše PPID. Tyto informace můžeme zjistit také pomocí příkazu Linux awk, jak je ukázáno níže.

$ ps aux | awk '/nano/ {print $2}'

Tento příkaz je flexibilnější, protože potlačuje všechny nepodstatné informace. Zobrazí pouze informace PPID, které hledáme.

Metoda 2:Použití příkazu pstree

Příkaz pstree nám poskytuje stromový pohled na všechny běžící procesy. Poskytuje grafický pohled na seznam úloh Linuxu z okna terminálu. Pomocí tohoto příkazu můžete zobrazit PPID a také všechny informace PID procesu. Podívejte se na níže uvedené příklady a zjistěte, jak využít pstree k nalezení PPID konkrétního procesu.

$ nano> /dev/null &
$ pstree -p | grep 'nano'$ pstree -p | awk '/nano/ {print $NF}'

Nejprve jsme vytvořili proces na pozadí pomocí prvního příkazu. Druhý příkaz pak načte PPID tohoto procesu pomocí příkazu grep v Linuxu. Konečně třetí příkaz nám ukazuje, jak získat tuto hodnotu pomocí příkazu awk.

Metoda 3:Použití příkazu pgrep

Příkaz pgrep je jedním z nejjednodušších příkazů správy procesů v Linuxu. Zkontroluje seznam všech běžících procesů a vypíše PPID daného procesu na standardní výstup nebo v našem případě terminál. Funguje tak, že provádí párování regulárních výrazů a je mimořádně vhodný pro psaní skriptů prostředí Linux.

$ nano> /dev/null &
$ pgrep 'nano'

Nano proces jsme vytvořili podobně jako předchozí příklady. Potom jsme získali jeho PPID pomocí příkazu pgrep. Jakmile získáme tuto hodnotu, můžeme velmi snadno provést linuxovou úlohu zabíjení.

Metoda 4:Použití příkazu pidof

Příkaz pidof je další jednoduchý, ale užitečný způsob, jak určit PPID linuxového procesu. Zobrazuje jak PPID, tak všechny ostatní PID spojené s procesem. Podívejte se na níže uvedený přehled, abyste viděli, jak to použít v praxi.

$ nano> /dev/null &
$ pidof nano$ pidof -s nano

Při použití příkazu pidof ke kontrole běžících procesů v Linuxu často uvidíte více PID. V takových případech je obvykle první nebo poslední číslo PPID v závislosti na tom, zda jsou ve vzestupném nebo sestupném pořadí. Můžete použít -s možnost pidof to zmírnit. Zobrazí pouze hodnotu PPID.

Metoda 5:Použití horního příkazu

Příkaz top poskytuje pohled na všechny běžící procesy v operačních systémech podobných Unixu v reálném čase. Můžete to použít k zobrazení seznamu úloh systému Linux ve vašem terminálu a zjištění informací PID konkrétního procesu.

$ top

Pomocí následujících příkazů získáte PPID konkrétního procesu z výstupu příkazu top.

$ nano> /dev/null &
$ top -n1 -b | grep 'nano'$ top -n1 -b | awk '/nano/ {print $1}'

Protože top poskytuje výstup v reálném čase namísto ukládání statických dat do terminálu, použili jsme -n1 a -b možnost tisku statického výstupu. Poté můžete získat informace o PPID pomocí příkazu grep nebo příkazu awk v Linuxu.

Kill the Unresponsive Linux Process

K načtení PPID nereagujícího procesu můžete použít kteroukoli z výše uvedených metod. Jakmile to získáte, je čas celý proces zabít. Existuje několik příkazů, které nám to umožňují, například kill , pkill a zabít . V následujících částech uvidíme, jak fungují jeden po druhém.

Metoda 1:Použití příkazu kill

Příkaz kill je široce používán správci Linuxu kvůli jeho jednoduchosti a robustním akcím. Přebírá PID procesu a signál. Jádro na základě tohoto signálu ukončí/zastaví provádění procesu. Následující příkaz můžete použít k zobrazení všech dostupných signálů příkazu kill.

$ kill -l

Jak vidíte, kill nabízí 64 různých signálů. V této příručce se však budeme zabývat pouze dvěma z nich. Jedná se o signál 9 (SIGKILL) a signál 15 (SIGTERM). SIGTERM nebo signál 15 je bezpečný způsob, jak zabít nereagující proces. Na druhou stranu SIGKILL nebo signál 9 vynutí zabíjí proces Linuxu.

$ kill -9 8631$ kill -KILL 8631

Výše uvedené příkazy jsou ekvivalentní a vynutí ukončení procesu, který má PID 8631. To je PPID procesu ‚nano‘ v mém systému. Nahraďte jej PID nereagujícího procesu ve vašem systému.

$ kill -15 8631$ kill -TERM 8631

Výše uvedené příkazy jsou také ekvivalentní a proces elegantně ukončí. Proto může nějakou dobu trvat, než je proces zabit. Navíc možná budete muset přidat sudo před příkazem kill, pokud je proces ve vlastnictví jiného uživatele.

Metoda 2:Použití příkazu pkill

Příkaz pkill je jedním z nejuniverzálnějších příkazů správy procesů v Linuxu. Umožňuje nám zabít nereagující proces na základě jeho názvu, PID, vlastníka a dalších atributů runtime. Je to perfektní nástroj pro začínající uživatele nebo lidi, kteří nejsou obeznámeni s mnoha standardními terminálovými příkazy.

$ pkill nano$ pkill 8631$ pkill -e nano$ pkill -f nano

Pro zabití zombie/nereagujícího procesu v Linuxu můžete použít kterýkoli z výše uvedených příkazů pkill. Použijte -e Pokud chcete potvrzení o linuxové úloze kill. Příkaz pkill také umožňuje uživatelům odesílat specifické ukončovací signály.

Metoda 3:Použití příkazu killall

Příkaz killall umožňuje uživatelům ukončit nereagující procesy na základě jejich jmen. Používá se snadněji, ale pokud nejste opatrní, může to způsobit potíže. Protože killall ukončuje procesy založené na jménech, vždy existuje šance, že proces zabijete náhodou. Pokud jsou například ve vašem systému k dispozici různé verze nano, první příklad je všechny zabije.

$ killall nano$ killall --verbose nano$ killall --interactive nano$ killall --signal KILL nano

První příklad ukazuje základní použití příkazu killall v Linuxu. Druhý příkaz oznámí, zda byla úloha zabíjení úspěšná nebo ne, a třetí příkaz požádá uživatele o potvrzení před ukončením procesu. Ve výchozím nastavení používá killall signál SIGTERM pro zabíjení procesů. Signál však můžete specifikovat ručně, jak je znázorněno v posledním příkladu.

Metoda 4:Použití Handy One-Liners

Skutečná krása Linuxu spočívá v tom, že umožňuje uživatelům vytvářet sofistikované kombinace příkazů na základě jejich potřeb. Abychom to demonstrovali, nastínili jsme v této sekci několik jednoduchých zásad.

$ nano> /dev/null &
$ kill -9 $(pgrep nano)$ ps aux | grep -e 'nano' | awk '{print $2}' | xargs kill -9

V prvním příkladu jsme použili interpolaci shellu k předání PID procesu ‚nano‘ příkazu Linux kill. Druhý příklad využívá několik každodenních terminálových příkazů a přesměrování I/O k ukončení procesu. Až budete s linuxovým terminálem spokojeni, můžete si vytvořit své vlastní šikovné jednolinky.

Metoda 5:Zabijte více procesů pomocí skriptů Linux Shell

Někdy mohou uživatelé chtít ukončit více než jeden proces. Takové úlohy můžeme snadno automatizovat psaním jednoduchých shell skriptů. Pokud vás toto téma zajímá, podívejte se na naši předchozí příručku o skriptech prostředí Linux. Následující skript získá PPID procesů, které chcete ukončit, a poté je ukončí pomocí signálů zabíjení.

$ nano proc-killer.sh
#!/usr/bin/env bashfor pro v "[email protected]"do pid=$(pgrep $pro | head -1) echo $pid comm="kill -9 $pid" eval $commdone 

Nyní uložte tento soubor a přidejte oprávnění ke spuštění vydáním níže uvedeného příkazu.

$ chmod +x proc-killer.sh

Nyní můžete tomuto skriptu předat název procesů, které chcete ukončit.

$ ./proc-killer.sh nano gedit vlc

Jednoduše nahraďte argumenty jmény nereagujících linuxových procesů ve vašem systému.

Ukončení nereagujícího procesu z GUI

Nereagující proces můžete také ukončit z grafického uživatelského rozhraní nebo okna X. V následující části diskutujeme o dvou metodách, jak toho dosáhnout.

Metoda 1:Použití aplikace xkill

Moderní distribuce Linuxu využívají grafické okno X, které uživatelům poskytuje elegantní grafický zážitek. Existuje jednoduchý nástroj s názvem xkill, který umožňuje uživatelům zavřít nereagující okno GUI. Je to možné, protože v Linuxu je titulní okno aplikace oddělené od aplikace samotné.

Jednoduše přejděte do emulátoru terminálu Linux a zadejte xkill. Přemění váš kurzor myši na tlačítko X, které lze použít k zastavení jakéhokoli okna GUI.

$ xkill

Nyní vše, co musíte udělat, je kliknout na panel okna aplikace, která nereaguje, a aplikace se vypne a okamžitě zmizí.

Metoda 2:Použití aplikace System Monitor na Ubuntu

Většina běžných linuxových distribucí přichází s nějakým druhem monitorovacích nástrojů GUI, které uživatelům umožňují graficky ukončit pozastavený proces Linuxu. Například aplikace System Monitor na Ubuntu nám umožní intuitivním způsobem ukončit nereagující proces. Můžete jednoduše vybrat mrtvý proces ze seznamu procesů a zabít ho kliknutím pravým tlačítkem na proces a výběrem možnosti zabít.

K této aplikaci existuje mnohem více alternativ a jsme si jisti, že snadno najdete jednu pro vaši distribuci nebo desktopové prostředí.

Konec myšlenek

Vzhledem k tomu, že správa procesů v Linuxu je velmi všestranná, uživatelé jsou často frustrovaní, když se potýkají s nereagujícími procesy. Proto naši redaktoři v této příručce nastínili všechny možné způsoby ukončení mrtvého procesu Linuxu. Po přečtení tohoto byste měli být schopni ukončit všechny nereagující procesy buď z příkazového řádku, nebo z GUI. Můžete také použít kterýkoli z našich jednořádkových příkazů pro řešení takových nepříjemností v co nejkratším čase. Navíc můžete dokonce zabít více než jeden proces pomocí našeho jednoduchého shell skriptu. Doufejme, že jste od našeho průvodce získali informace, které jste hledali.


Linux
  1. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  2. Jak zabít proces běžící na konkrétním portu v Linuxu?

  3. Jak získat ID procesu pro ukončení procesu nohup?

  1. Jak zabít proces zombie na Linuxu

  2. Jak najít a zabít zombie proces v Linuxu

  3. Jak zabít největší proces v nereagujícím systému Linux

  1. Jak zabít proces nebo zastavit program v Linuxu

  2. Jak zabít proces v Linuxu pomocí příkazu?

  3. Jak pozastavit/obnovit proces v Linuxu