Jak ukončit proces nebo zastavit program v Linuxu

Když se proces chová špatně, můžete ho někdy chtít ukončit nebo zabít. V tomto příspěvku prozkoumáme několik způsobů, jak ukončit proces nebo aplikaci z příkazového řádku i z grafického rozhraní, přičemž jako ukázkovou aplikaci použijeme gedit.

Použití znaků příkazového řádku/ukončení

Ctrl + C

Jedním z problémů vyvolání gedit z příkazového řádku (pokud nepoužíváte gedit &) je, že se neuvolní výzva, takže relace shellu je zablokována. V takových případech se hodí Ctrl+C (klávesa Control v kombinaci s ‚C‘). Tím se ukončí gedit a veškerá práce bude ztracena (pokud nebyl soubor uložen). Ctrl+C vyšle signál SIGINT do gedit. To je signál stop, jehož výchozí akcí je ukončení procesu. Dává shellu pokyn, aby zastavil gedit a vrátil se do hlavní smyčky, a vy dostanete zpět výzvu.

$ gedit
^C

Ctrl + Z

Tomu se říká znak pozastavení. Vysílá signál SIGTSTP do procesu. Je to také signál zastavení, ale výchozí akcí není zabití, ale pozastavení procesu.

Zastaví (zabije/ukončí) gedit a vrátí výzvu shellu.

$ gedit
^Z
+ Stopped gedit
$

Jakmile je proces pozastaven (v tomto případě gedit), není možné do gedit nic psát ani dělat. Na pozadí se z procesu stane úloha. To lze ověřit příkazem jobs.

$ jobs
+ Stopped gedit

jobs umožňuje ovládat více procesů v rámci jedné relace shellu. Podle potřeby můžete úlohy zastavovat, obnovovat a přesouvat na pozadí nebo do popředí.

Obnovíme gedit na pozadí a uvolníme prompt pro spuštění jiných příkazů. Můžete to provést pomocí příkazu bg, za kterým následuje ID úlohy (všimněte si z výstupu jobs výše. je ID úlohy).

$ bg 1
+ gedit &

Toto je podobné jako spuštění gedit příkazem &,:

 $ gedit &

Použití příkazu kill

kill umožňuje jemnou kontrolu nad signály, umožňuje signalizovat proces zadáním buď názvu signálu, nebo čísla signálu, za kterým následuje ID procesu neboli PID.

Na příkazu kill se mi líbí, že může pracovat i s ID úloh. Spusťme gedit na pozadí pomocí gedit &. Za předpokladu, že mám ID úlohy gedit z příkazu jobs, pošleme SIGINT na gedit:

 $ kill -s SIGINT %1

Poznamenejme, že ID úlohy by mělo mít předponu %, jinak jej kill bude považovat za PID.

kill může pracovat bez explicitního zadání signálu. V takovém případě je výchozí akcí odeslání SIGTERM, které proces ukončí. Spusťte příkaz kill -l pro výpis všech názvů signálů a pomocí příkazu man kill si přečtěte manuálovou stránku.

Použití killall

Pokud nechcete zadávat ID úlohy nebo PID, příkaz killall vám umožní zadat proces podle jména. Nejjednodušší způsob, jak ukončit gedit pomocí killall, je:

 $ killall gedit

Tím se ukončí všechny procesy se jménem gedit. Stejně jako kill je výchozím signálem SIGTERM. Má možnost ignorovat případ pomocí -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Chcete-li se dozvědět více o různých příznacích, které poskytuje killall (například -u, který umožňuje zabíjet procesy vlastněné uživatelem), podívejte se na manuálovou stránku (man killall)

Použití xkill

Setkali jste se někdy s problémem, kdy přehrávač médií, například VLC, zešedivěl nebo se zasekl? Nyní můžete zjistit PID a ukončit aplikaci pomocí některého z výše uvedených příkazů nebo použít xkill.

xkill umožňuje ukončit okno pomocí myši. Stačí v terminálu provést příkaz xkill, který by měl změnit kurzor myši na symbol x nebo malou ikonu lebky. Klepněte na x v okně, které chcete zavřít. Při používání xkill však buďte opatrní – jak vysvětluje manuálová stránka, může být nebezpečné. Byli jste varováni!

Další informace naleznete na manuálové stránce každého příkazu. Můžete také prozkoumat příkazy jako pkill a pgrep.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.