máte zájem dozvědět se více o správě Linuxu? Prozkoumejte tyto školení pro Linux.
- Úvod do Linuxu (LFS101x) – Zdarma
- Základy Linux Administrace Systému (LFS201)
Učit se, jak zabít potulný procesy v tomto tutoriálu z našeho archivu.
představte si to: Jste spustili aplikaci (ať už je to z vašeho oblíbeného desktop menu, nebo z příkazové řádky) a začnete používat, že zahájila app, jen aby je zamknout na vás, přestat vykonávat, nebo nečekaně zemřít. Pokusíte se spustit aplikaci znovu, ale ukázalo se, že originál se nikdy úplně nevypne.
Co děláte? Zabijete proces. Ale jak? Věřte tomu nebo ne, vaše nejlepší sázka nejčastěji leží v příkazovém řádku. Naštěstí má Linux všechny nástroje potřebné k tomu, aby vás, uživatele, zmocnil k zabití potulného procesu. Než však okamžitě spustíte tento příkaz k zabití procesu, musíte nejprve vědět,jaký je proces. Jak se o tento vrstvený úkol staráte? Je to vlastně docela jednoduché … jakmile znáte nástroje, které máte k dispozici.
dovolte mi, abych vám představil uvedené nástroje.
kroky, které nastíním, budou fungovat téměř na každé distribuci Linuxu, ať už je to desktop nebo server. Budu se zabývat přísně příkazovým řádkem, takže otevřete terminál a připravte se na psaní.
lokalizace procesu
prvním krokem při zabíjení nereagujícího procesu je jeho lokalizace. Existují dva příkazy, které používám k vyhledání procesu: top a ps. Top je nástroj, který by měl každý správce poznat. S top získáte úplný seznam aktuálně spuštěného procesu. Z příkazového řádku, problém top vidět seznam vašich běžících procesů (Obrázek 1).
z tohoto seznamu uvidíte některé poměrně důležité informace. Řekněme například, že Chrome nereagoval. Podle našeho horního displeje můžeme rozeznat, že existují čtyři instance prohlížeče chrome běžící s ID procesů (PID) 3827, 3919, 10764 a 11679. Tyto informace bude důležité mít s jedním konkrétním způsobem zabíjení procesu.
ačkoli top je neuvěřitelně šikovný, není to vždy nejúčinnější způsob, jak získat informace, které potřebujete. Řekněme, že víte, že proces Chrome je to, co musíte zabít, a nechcete se dívat na informace v reálném čase nabízené společností top. Za tímto účelem můžete použít příkaz ps a filtrovat výstup pomocí grep. Příkaz ps hlásí snímek aktuálního procesu a grep vytiskne řádky odpovídající vzoru. Důvod, proč filtrujeme ps přes grep, je jednoduchý: Pokud příkaz ps vydáte sám, získáte přehled všech aktuálních procesů. Chceme pouze seznam přidružený k prohlížeči Chrome. Takže tento příkaz by vypadal takto:
ps aux | grep chrome
aux možnosti jsou následující:
-
a = zobrazit procesy všech uživatelů,
-
u = zobrazení procesu uživatel/majitel
-
x = také ukazují, procesů, které nejsou připojeny k terminálu
x možností je důležité, když jste na lovu pro informace týkající se grafické aplikace.
když vydáte výše uvedený příkaz, dostanete více informací, než potřebujete (Obrázek 2) pro zabití procesu, ale někdy je to efektivnější než použití top.
zabíjení procesu
nyní se dostáváme k úkolu zabití procesu. Máme dvě informace, které nám pomohou zabít potulný proces:
-
název procesu
-
ID procesu
který použijete, určí příkaz použitý pro ukončení. Existují dva příkazy slouží k zabít proces:
-
zabít – Zabít proces, při ID
-
killall – Zabije proces podle názvu.
k Dispozici jsou také různé signály, které mohou být zaslány oba zabít příkazy. Jaký signál odešlete, bude určeno tím, jaké výsledky chcete od příkazu kill. Můžete například odeslat signál HUP (zavěsit) příkazu kill, který proces efektivně restartuje. Toto je vždy moudrá volba, když potřebujete proces okamžitě restartovat(například v případě démona). Seznam všech signálů, které lze odeslat příkazu kill, můžete získat vydáním kill-l. najdete poměrně velký počet signálů (obrázek 3).
nejčastějšími kill signály jsou:
Signal Name |
Single Value |
Effect |
SIGHUP |
Hangup |
|
SIGINT |
Interrupt from keyboard |
|
SIGKILL |
Kill signal |
|
SIGTERM |
Termination signal |
|
SIGSTOP |
17, 19, 23 |
Stop the process |
Co je na tom hezké, je, že místo názvu signálu můžete použít hodnotu signálu. Takže si nemusíte pamatovat všechny názvy různých signálů.
takže nyní použijme příkaz kill k zabití naší instance prohlížeče chrome. Struktura tohoto příkazu by byla:
kill SIGNAL PID
kde signál je signál, který má být odeslán, a PID je ID procesu, který má být zabit. Z našeho příkazu ps už víme, že ID, které chceme zabít, jsou 3827, 3919, 10764 a 11679. Abychom vyslali signál zabití, vydali bychom příkazy:
kill -9 3827kill -9 3919kill -9 10764kill -9 11679
jakmile vydáme výše uvedené příkazy, všechny procesy chrome budou úspěšně zabity.
pojďme snadnou cestou! Když už víme, že proces chceme zabít, se jmenuje chrome, můžeme použít příkaz killall a posílat stejný signál jako proces, takže:
killall -9 chrome
upozornit pouze na výše uvedený příkaz je, že to nemusí chytit všechny běžící procesy chromu. Pokud po spuštění výše uvedeného příkazu vydáte příkaz ps aux|grep chrome a uvidíte spuštěné zbývající procesy, nejlepší je vrátit se k příkazu kill a odeslat signál 9 k ukončení procesu pomocí PID.
ukončení procesů snadné
jak můžete vidět, zabíjení potulných procesů není zdaleka tak náročné, jak jste si možná mysleli. Když skončím s tvrdohlavým procesem, mám tendenci začít s příkazem killall, protože je to nejúčinnější cesta k ukončení. Nicméně, když skončíte s opravdu divokým procesem, příkaz kill je způsob, jak jít.
Zjistěte více o Linuxu prostřednictvím bezplatného kurzu „Úvod do Linuxu“ od Linux Foundation a edX.