GNU/Linux >> Znalost Linux >  >> Linux

Jak zabít proces nebo zastavit program v Linuxu

Když se proces chová nesprávně, 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í pomocí gedit jako ukázkové aplikace.

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

Ctrl + C

Jeden problém s vyvoláním gedit z příkazového řádku (pokud nepoužíváte gedit & ) je, že neuvolní výzvu, takže relace shellu je blokována. V takových případech přijde vhod Ctrl+C (klávesa Control v kombinaci s 'C'). Tím se ukončí gedit a veškerá práce bude ztracena (pokud soubor nebyl uložen). Ctrl+C odešle SIGINT signál do gedit . Toto je signál zastavení, jehož výchozí akcí je ukončení procesu. Instruuje shell, aby zastavil gedit a vraťte se do hlavní smyčky a dostanete výzvu zpět.

$ gedit
^C

Ctrl + Z

Říká se tomu suspendovací znak . Odešle SIGTSTP signál ke zpracování. Toto je také signál zastavení, ale výchozí akcí není zabít, ale pozastavit proces.

Zastaví (zabije/ukončí) gedit a vraťte příkazový řádek.

   $ gedit
   ^Z
   [1]+  Stopped                 gedit
   $

Jakmile je proces pozastaven (v tomto případě gedit ), v gedit není možné nic psát ani dělat . Na pozadí se proces stává úkolem . To lze ověřit pomocí jobs příkaz.

  $ jobs
  [1]+  Stopped                 gedit

jobs umožňuje řídit více procesů v rámci jedné relace shellu. Úlohy můžete podle potřeby zastavit, obnovit a přesunout na pozadí nebo do popředí.

Pokračujme v gedit na pozadí a uvolněte výzvu ke spuštění dalších příkazů. Můžete to udělat pomocí bg příkaz, za kterým následuje ID úlohy (všimněte si [1] z výstupu jobs výše. [1] je ID úlohy).

   $ bg 1
   [1]+ gedit &

Je to podobné, jako když spustíte gedit pomocí &, :

   $ gedit &

Pomocí zabít

kill umožňuje jemné ovládání signálů a umožňuje vám signalizovat proces zadáním názvu signálu nebo čísla signálu, za kterým následuje ID procesu nebo PID.

Co se mi líbí na kill je, že může pracovat také s ID úloh. Začněme gedit na pozadí pomocí gedit & . Za předpokladu, že mám ID úlohy gedit z jobs příkaz, odešleme SIGINT do gedit :

   $ kill -s SIGINT %1

Všimněte si, že před ID úlohy by mělo být % nebo kill bude to považovat za PID.

kill může fungovat bez explicitního zadání signálu. V takovém případě je výchozí akcí odeslání SIGTERM , která proces ukončí. Proveďte kill -l vypsat všechny názvy signálů a použít man kill příkaz k přečtení manuálové stránky.

Pomocí killall

Pokud nechcete zadat ID úlohy nebo PID, killall umožňuje specifikovat proces podle názvu. Nejjednodušší způsob, jak ukončit gedit pomocí killall je:

   $ killall gedit

Tím se zabijí všechny procesy s názvem gedit . Jako kill , výchozí signál je SIGTERM . Má možnost ignorovat velká a malá písmena pomocí -I :

   $ gedit &
   [1] 14852

   $ killall -I GEDIT
   [1]+  Terminated              gedit

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

Pomocí xkill

Setkali jste se někdy s problémem, kdy přehrávač médií, jako je VLC, zešedl nebo se zastavil? Nyní můžete najít PID a ukončit aplikaci pomocí jednoho z výše uvedených příkazů nebo použít xkill .

xkill umožňuje zabít okno pomocí myši. Jednoduše spusťte xkill v terminálu, který by měl změnit kurzor myši na x nebo malá ikona lebky. Klikněte na x na okně, které chcete zavřít. Při používání xkill buďte opatrní , ačkoli — jak vysvětluje jeho manuálová stránka, může to být nebezpečné. Byli jste varováni!

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


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

  2. Jak zastavit „nepřerušitelný“ proces v Linuxu?

  3. Jak zastavit proces obrazovky v linuxu?

  1. Jak zabít proces zombie na Linuxu

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

  3. Jak pozastavit/obnovit proces v Linuxu

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

  2. Jak restartovat (nebo resetovat) běžící proces v Linuxu?

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