Zpět na blog

Správa procesů v Linuxu – průvodce použitím ps, kill a nice

Správa procesů v Linuxu – průvodce použitím ps, kill a nice

Úvod

Když většina z nás používá počítače, spouštíme různé aplikace. Tyto aplikace jsou spouštěny programy zvanými servery nebo operační systémy. Existuje mnoho různých druhů serverů, které fungují různými způsoby. Jedním z nich je Linux. Linux spouští aplikace ve formě procesů.

V Linuxu označujeme každou aplikaci jako „proces“. Server je schopen spravovat nízkoúrovňový aspekt životního cyklu procesu. Jako uživatel možná budete muset se serverem komunikovat, abyste mohli manipulovat s některými aspekty vyšší úrovně. S OS můžete komunikovat a spravovat jej pomocí různých nástrojů. Existuje mnoho příkazů, které můžete použít k úpravě různých aspektů a funkcí serveru. Zde je snadno srozumitelný návod, jak snadno nastavit server založený na Linuxu na Ubuntu. Dále se můžete dozvědět jak nainstalovat LAMP Stack (Linux, Apache, MySQL, PHP).

Tato příručka se zaměřuje na to, jak můžete používat ps, kill a nice ke správě procesů v Linuxu.

Zobrazení běžících procesů v Linuxu

  • top

Pro začátek, jedním z nejzákladnějších příkazů, které byste měli znát, je top. Tento nástroj vám pomůže vizualizovat, které procesy v systému aktuálně běží. Zde je ukázka, jak to bude vypadat, když jej spustíte:

top command output

 

V horní části výsledku naleznete systémové statistiky. Ty vám poskytnou informace o věcech, jako je zatížení systému a počet úloh. V tomto příkladu můžete zjistit, že běží jeden proces a 55 nečinných procesů. Nečinné nebo spící procesy jsou ty, které aktuálně nepoužíváte. To znamená, že neobsazují systémové prostředky. Nakonec můžete vidět všechny běžící procesy v dolní části vyskakovacího okna se statistikami využití.

  • htop

Před použitím tohoto příkazu jej budete muset nainstalovat z repozitářů zadáním a spuštěním následujícího:

Jakmile jej máte, můžete jej použít k zobrazení podobných informací jako u příkazu top. Hlavní rozdíl je v tom, že s příkazem htop získáte uživatelsky přívětivější výsledek:

htop command output

Jak vidíte, tento výsledek je snadno srozumitelný a interpretovatelný.

Použití ps k výpisu procesů

Ačkoli můžete k zobrazení běžících procesů použít výše uvedené příkazy, nemusí vždy pokrýt všechny scénáře. Naštěstí máme k dispozici silnější a flexibilnější nástroj. Tím je příkaz ps.

Pojďme se podívat, co uvidíte, pokud příkaz spustíte tak, jak je:

ps command output

V tomto výstupu můžete vidět všechny procesy, které běží ve vztahu k aktuálnímu uživateli a relaci. To vám však neposkytne mnoho informací.

Pokud chcete ucelenější pohled na všechny procesy běžící v systému, musíte použít argument. Argument vám umožní vidět všechny procesy, které vlastní všichni uživatelé, bez ohledu na asociaci s terminálem. Výstup se také zobrazí ve velmi uživatelsky přívětivém a snadno čitelném formátu. Zde je příklad:

ps aux

Na druhou stranu můžete tyto informace vizualizovat také ve formátu stromu. Zde, jak uvidíte, se projeví i hierarchické vztahy:

output in tree format

V tomto příkladu můžete vidět, jak se kthreadd zobrazuje jako rodič následně navazujících procesů.

  • Co jsou to ID procesů?

Jako uživatel Linuxu nebo Unixu byste měli vědět o ID procesů. Tyto jedinečné identity, známé také jako PID, přiděluje každému procesu systém. Pomocí těchto identit server sleduje každý jednotlivý proces. Chcete-li zjistit PID daného procesu, musíte použít příkaz pgrep, například takto:

Při spuštění systému začne běžet první proces. Tento proces se nazývá init. Jako výchozí mechanismus získá proces init PID „1“. PID tohoto procesu můžete zkontrolovat následovně:

Proces init má pak na starosti spuštění všech ostatních programů nebo procesů. Pochopitelně, následující procesy budou mít rostoucí nebo větší PID.

  • Co jsou to rodičovské procesy?

Dalším konceptem, který je třeba znát, je rodičovský proces. Pokud proces A spustí proces B, pak je proces A rodičovským procesem procesu B. Pro snazší rozlišení systém přiřazuje rodičovským procesům PPID. Tohoto PPID si můžete všimnout v záhlaví sloupců, kdykoli spustíte jakýkoli příkaz pro správu, jako je top, htop a ps.

  • Co jsou vztahy rodič-potomek?

Jak již víme, rodičovské procesy spouštějí dceřiné procesy. Toto vytvoření probíhá ve dvou krocích. Prvním je fork(). Ten začíná vytvořením nového adresního prostoru. Také kopíruje prostředky rodiče pomocí copy-on-write, aby byly k dispozici i v dceřiném procesu. Druhým je exec(). Ten je zodpovědný za načtení a spuštění spustitelného souboru v nově vytvořeném adresním prostoru.

  • Co když dceřiný proces zemře dříve než rodičovský proces?

V takovém případě se z dceřiného procesu stane zombie. To platí do doby, než o něm rodičovský proces shromáždí nějaké informace nebo sdělí jádru, že přidružené informace nepotřebuje. Jakmile se tak stane, prostředky, které proces využíval, se uvolní.

  • Co když rodičovský proces zemře dříve než dceřiný proces?

V tomto scénáři systém znovu přiřadí dceřiný proces jinému rodičovskému procesu. Může to být init nebo jakýkoli jiný proces.

Odesílání signálů procesům v Linuxu

Odesláním signálu můžete přimět daný proces, aby vám odpověděl. Signály vám pomáhají komunikovat s operačním systémem. Signál můžete použít k ukončení, spuštění nebo úpravě chování či úkolu dané aplikace.

  • Použití PID k odesílání signálů

Jedním z nástrojů, které můžete v Linuxu použít k odesílání signálů, je kill. Tento příkaz, jak napovídá jeho název, vám pomůže ukončit nebo zabít proces:

Tento nástroj odešle procesu signál TERM, který mu přikáže proces ukončit. Příkaz zajistí, že aplikace provede vyčištění a hladce se ukončí. V případě, že se program po signálu TERM neukončí hladce, můžete jej obejít přímým odesláním signálu KILL:

Tento signál nesměřuje do programu. Jde do jádra operačního systému. Jádro proces přímo ukončí. To můžete použít v případě, že program ignoruje signály, které mu posíláte.

V tomto příkazu můžete také nahradit název signálu číslem, které je s ním spojeno. Místo „-TERM“ můžete například použít „-15“. Podobně můžete nahradit „-KILL“ za „-9“.

  • Použití signálů pro různé účely

Signály můžete použít i k jiným věcem než k zabíjení nebo ukončování programů. Jedním z problémů, které můžete řešit, je například restartování démonů. Kdykoli démon obdrží signál zavěšení (hang up) neboli HUP, restartuje se v programech jako Apache. Chcete-li to přepsat, můžete použít následující signál:

Tento příkaz přiměje Apache znovu načíst konfiguraci. V důsledku toho vám bude i nadále poskytovat příslušný obsah.

Pokud chcete vidět, jaké signály můžete poslat pomocí nástroje kill, použijte následující příkaz:

list of signals

  • Odesílání signálů podle názvu

Tradičně byste signál posílali pomocí PID programu. Máte však možnost posílat signály pomocí běžného názvu procesu. K tomu můžete použít příkaz pkill. Funguje podobně jako příkaz pkill. Jediným rozdílem je, že umožňuje použít název procesu:

Tento příkaz pkill je ekvivalentem následujícího příkazu kill:

Máte také k dispozici příkaz pro případ, kdy chcete poslat signál každé instanci namísto konkrétního procesu. Následující příkaz odešle signál TERM všem instancím Firefoxu běžícím v systému:

Úprava priorit procesů

Další věcí, kterou můžete s příkazy Linuxu dělat, je upravovat priority. To znamená, že se můžete rozhodnout, který proces má ve vašem serverovém prostředí prioritu. Mohou existovat určité procesy, které považujete za kritické. Jiné nemusí být tak nezbytné. Systém tyto druhé programy spustí pouze tehdy, když zbudou nějaké prostředky.

Prioritu procesů v Linuxu můžete ovládat pomocí příkazu niceness. Tato hodnota označuje úkoly s vysokou prioritou jako méně ohleduplné (less nice) a procesy s nízkou prioritou jako ohleduplnější (more nice). Představte si to takto: procesy s vysokou prioritou jsou méně ohleduplné, protože hromadí prostředky. Úkoly s nízkou prioritou je sdílejí, takže jsou ohleduplnější.

Hodnotu nice daného procesu uvidíte po spuštění příkazu top. Tato hodnota se nachází ve sloupci „NI“. Úkoly s vysokou prioritou mají hodnoty nice v rozmezí „-19/-20“. Procesy s nízkou prioritou se pohybují v rozmezí „19/20“. Uvidíte něco takového:

Pokud chcete spustit proces s osobně přiřazenou hodnotou nice, stačí použít příkaz nice:

Tento příkaz bude fungovat pouze při spouštění daného programu. Pokud chcete změnit hodnotu nice programu, který již běží, musíte použít renice:

Závěr

Jak vidíte, tyto nástroje se od těch grafických značně liší. V důsledku toho mohou být pro začátečníka obtížně srozumitelné. Tento průvodce vám pomůže se s těmito příkazy seznámit. Více praxe vám pomůže se je lépe naučit a efektivněji je používat.

Podívejte se na naše další zdroje, které vám pomohou lépe spravovat vaše linuxové servery, včetně návodů na jak nakonfigurovat linuxový server pro použití ověřování založeného na SSH klíčích, vyhledávání souborů na vašem linuxovém VPS systému pomocí příkazů whereis, which, whatis, readlink a find, a čtení a nastavování proměnných prostředí a shellu na linuxovém VPS.

Příjemnou práci s počítačem!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.