Jak zabít proces v Linuxu

Ukončení procesů v Linuxu: Průvodce pro rok 2023

Každý z nás se občas setká s tím, že náš počítač pracuje neobvykle pomalu a seká se i při plnění jednoduchých úkolů. V operačním systému Windows je k dispozici Správce úloh, který umožňuje sledovat a ukončovat procesy zatěžující paměť. Nicméně Linux nabízí mnohem širší škálu nástrojů a příkazů pro efektivní správu těchto procesů. V tomto článku si představíme několik jednoduchých metod, jak ukončit procesy v Linuxu, jak prostřednictvím příkazového řádku, tak i za pomoci grafického rozhraní.

Procesy v Linuxu – co to vlastně je?

Než se pustíme do podrobností o správě procesů, objasněme si, co se vlastně procesem v Linuxu rozumí. V Linuxu se každá běžící instance programu nazývá „proces“. Spustitelný soubor, ze kterého proces vzniká, je pak „program“. Jakmile je program spuštěn, vytvoří se proces, kterému je přiděleno jedinečné pěticiferné číslo, známé jako „ID procesu“ (PID). Jakmile proces dokončí svou práci nebo je násilně ukončen, jeho PID se uvolní a může být přidělen novému procesu.

Ukončení procesů pomocí příkazového řádku v Linuxu

Přestože se práce s terminálem může zdát pro základní operace složitější než používání grafického rozhraní, správa procesů se s pochopením příkazů stává velmi efektivní a jednoduchá.

Signály pro ukončení

Při pokusu o ukončení procesu, ať už prostřednictvím grafického rozhraní, nebo příkazového řádku, jádro systému posílá procesu signál k ukončení. Proces se následně chová v závislosti na přijatém signálu. Každý takový signál má přidělené specifické číslo. Mezi nejdůležitější signály pro ukončení patří:

Signál Číselná hodnota Popis
SIGHUP 1 Signal Hangup – zasílá se při zavření terminálu.
SIGINT 2 Signal Interrupt – zasílá se, když uživatel ukončí proces.
SIGKILL 9 Signal Kill – okamžité ukončení procesu.
SIGTERM 15 Signal Terminate – požadavek na ukončení procesu a uvolnění prostředků.
SIGSTOP 19 (ARM, x86), 17 (ALPHA), 23 (MIPS), 24 (PA-RISC) Signal Stop – dočasné pozastavení procesu.

Mezi nejčastěji používané signály patří SIGKILL (9) a SIGTERM (15).

Zjištění ID procesů

Před samotným ukončením procesu je nutné zjistit jeho ID a další informace. K tomu slouží příkaz ps:

ps

Příkaz ps zobrazí seznam všech spuštěných procesů. Pro zjednodušení můžete použít příkaz grep pro filtrování konkrétního procesu:

ps | grep

Ještě jednodušší způsob, jak zjistit PID procesu, je pomocí příkazu pidof:

pidof

Ukončení procesů pomocí příkazu kill

Jakmile znáte PID procesu, můžete ho ukončit pomocí příkazu kill. Základní syntaxe je následující:

kill

Parametr <signal> je volitelný. Pokud ho nezadáte, příkaz kill standardně odešle signál SIGTERM (15). Pro odeslání jiného signálu zadejte jeho číselnou hodnotu nebo název.

Ukončení procesu pomocí příkazu pkill

Pro zjednodušení procesu hledání PID můžete využít příkaz pkill, který ukončí procesy, které odpovídají zadanému vzoru. Jeho syntaxe je:

pkill

Některé užitečné volby pro příkaz pkill:

Volba Popis
-n Vybere pouze nejnovější proces odpovídající ID
-u Vybere procesy vlastněné konkrétním uživatelem
-x Vybere procesy, které přesně odpovídají vzoru

To je užitečné zejména v situacích, kdy více uživatelů pracuje se stejným programem a jedna instance začne fungovat nesprávně. Například na obrázku níže vidíme, jak ukončíme instanci „gedit“, která patří uživateli „intel“ pomocí příkazu pkill:

pkill -u intel gedit

Ukončení procesu pomocí příkazu killall

Příkaz killall funguje podobně jako kill, ale ukončí všechny procesy se zadaným názvem, bez ohledu na uživatele. Ve výchozím stavu odesílá signál SIGTERM, pokud není specifikováno jinak. Příkaz killall nemůže ukončit sám sebe, ale může ukončit jiné instance killall. Syntax je následující:

killall

Mezi volby pro killall patří:

Volba Popis
-r Interpretuje název procesu jako regulární výraz
-u Ukončí procesy patřící danému uživateli
-o Ukončí procesy starší než zadaný čas
-y Ukončí procesy novější než zadaný čas

Příkaz killall je užitečný pro ukončení všech instancí stejného procesu nebo procesů patřících konkrétnímu uživateli. Níže ukážeme příklad ukončení všech procesů „sleep for 500 seconds“ pomocí killall:

killall -v spát

Ukončení procesu pomocí příkazů top/htop

Tyto metody jsou ideální, pokud nemáte přehled o procesech zatěžujících systém. Oba příkazy zobrazují seznam všech spuštěných procesů a umožňují jejich snadné ukončení. Příkaz top spustíte jednoduchým zadáním:

top

Výstup příkazu top je rozdělen do sloupců:

  • PID – ID procesu
  • USER – vlastník procesu
  • PR – priorita procesu
  • NI – „nice“ hodnota pro manuální úpravu priority
  • VIRT – virtuální paměť využívaná procesem
  • RES – fyzická paměť využívaná procesem
  • SHR – sdílená paměť
  • S – stav procesu (D – nepřerušovaný spánek, R – běží, S – spí, T – zastaveno, Z – zombie)
  • %CPU – procento využití CPU
  • %MEM – procento využití paměti
  • TIME+ – celkový čas běhu procesu
  • COMMAND – název příkazu

Pokud neznáte PID procesu, který chcete ukončit, můžete ho vyhledat pomocí šipek nebo stiskem klávesy ‚L‘ pro vyhledávání podle názvu. Jakmile proces najdete, stiskněte ‚k‘, zadejte PID (nebo ponechte zvýrazněný proces) a stiskněte ENTER. Dále zadejte signál pro ukončení a opět stiskněte ENTER. Pro opuštění top stiskněte ‚q‘.

Příkaz htop nabízí uživatelsky přívětivější rozhraní a přehlednější zobrazení procesů. Ve většině distribucí není předinstalovaný, proto jej nainstalujte pomocí:

sudo apt install -y htop

Spuštění htop provedete příkazem:

htop

Pro ukončení procesu přejděte na jeho název, stiskněte klávesu F9 a Enter. Pro vyhledávání procesu stiskněte F3, zadejte jméno a potvrďte. Nalezený proces ukončíte opět pomocí klávesy F9 a Enter.

Ukončení procesů pomocí System Monitor

Pokud preferujete grafické rozhraní, můžete využít nástroj monitorování systému, který je součástí každé distribuce Linuxu. Otevřete System Monitor z nabídky Aplikace a postupujte podle následujících kroků:

1. V okně System Monitor přejděte na kartu „Procesy“. Zobrazí se seznam všech spuštěných procesů. Pomocí CTRL+F můžete vyhledat proces podle názvu. Klikněte na proces a vyberte možnost „Ukončit proces“.

2. Objeví se potvrzovací dialog. Kliknutím na červené tlačítko „Ukončit proces“ proces ukončíte.

Často kladené otázky

Jak zastavím všechny procesy v Linuxu?

Pro zastavení všech procesů patřících konkrétnímu uživateli (kromě přihlašovacího shellu a procesů jádra) použijte příkazy pkill nebo killall s volbou -u:

pkill -u

killall -u

Pro ukončení všech procesů, včetně init systému, stiskněte na klávesnici ALT + Prt Sc + o.

Je v pořádku ukončit proces?

Ukončení nepotřebných procesů na pozadí, které spotřebovávají mnoho paměti, uvolní systémové zdroje pro další procesy. Před ukončením se ale ujistěte, že se nejedná o důležitý systémový proces.

Jaké jsou procesy na pozadí v Linuxu?

Procesy na pozadí v Linuxu běží bez instance shellu a bez nutnosti interakce uživatele. Lze je zobrazit pomocí příkazů top, htop, ps atd.

Co je to zombie proces?

Zombie proces je proces, který byl ukončen, ale stále zabírá paměť.

Co dělá CTRL + Z v Linuxu?

Kombinace CTRL + Z odešle signál SIGTSTP, který pozastaví proces a přesune jej na pozadí. Dokud není proces vrácen do popředí, nelze ho ukončit.

Snadné ukončování procesů v Linuxu

Ukončování procesů, které nadměrně zatěžují paměť, je základní dovednost pro každého uživatele. V tomto článku jsme si ukázali, jak používat příkazový řádek (killall, pkill), tak grafické uživatelské rozhraní pro ukončování procesů v Linuxu. Popsali jsme i oblíbené nástroje jako top a htop. Pokud narazíte na jakékoliv problémy, dejte nám vědět v komentářích.