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
.