Jak používat příkaz ps k monitorování procesů Linuxu

Získejte přehled o procesech běžících na vašem Linuxovém systému pomocí příkazu ps. Můžete vyhledávat procesy podle jejich jména, uživatele nebo dokonce terminálu, a to s takovou úrovní detailů, jakou potřebujete. Ukážeme si, jak na to.

Správa procesů v Linuxu

Jádro je základem všech operačních systémů Linux a Unix. Mezi jeho mnohé úkoly patří přidělování systémových zdrojů, jako je RAM a čas procesoru. Tyto zdroje musí být spravovány v reálném čase, aby všechny běžící procesy dostaly spravedlivý podíl, a to podle priority každého úkolu.

Někdy se mohou úkoly zablokovat, dostat se do nekonečné smyčky nebo přestat reagovat z různých důvodů. Může se stát, že procesy běží dál, ale spotřebovávají příliš mnoho času CPU nebo RAM, nebo se chovají jinak nevhodně. V takových situacích je někdy potřeba procesy ukončit, aby se ulevilo všem zúčastněným. Prvním krokem je samozřejmě identifikovat problémový proces.

Možná ale nemáte s procesy žádné problémy. Možná vás jen zajímá, jaké procesy běží uvnitř vašeho počítače a rádi byste se podívali pod pokličku. Příkaz ps uspokojí obě tyto potřeby. Poskytuje vám snímek aktuálního stavu procesů ve vašem počítači.

Příkaz ps je dostatečně flexibilní, aby vám poskytl přesně ty informace, které potřebujete, a ve formátu, který vám vyhovuje. Má mnoho možností. Zde popsané možnosti pokryjí většinu běžných potřeb. Pokud byste potřebovali jít s ps do větší hloubky, tento úvod vám usnadní orientaci v manuálové stránce.

Zobrazení seznamu procesů

Nejjednodušší způsob, jak použít ps, je spustit jej bez jakýchkoliv parametrů:

ps

ps zobrazí seznam procesů spuštěných uživatelem, který příkaz vyvolal.

Čtyři sloupce představují:

PID: Identifikační číslo procesu.
TTY: Název konzole, ve které je uživatel přihlášen.
ČAS: Množství času procesoru, který proces spotřeboval.
CMD: Název příkazu, který proces spustil.

Zobrazení procesů všech uživatelů

Přidáním volby -e (vybrat všechny procesy) můžeme zobrazit seznam procesů spuštěných všemi uživateli, nejen tím, kdo spustil ps. Protože to bude dlouhý seznam, rozdělíme ho do menších částí pomocí less:

ps -e | less

Seznam procesů je přesměrován do less.

V seznamu je nyní mnohem více položek, ale stále vidíme stejné čtyři sloupce jako předtím. Záznamy s otazníkem ‚?‘ ve sloupci TTY nebyly spuštěny z terminálového okna.

Zobrazení hierarchie procesů

Při řešení problémů nebo identifikaci konkrétního procesu může být užitečné vidět, které procesy spouštěly jiné procesy. K tomu použijeme volbu -H (hierarchie).

ps -eH | less

Odsazení označuje, které procesy jsou rodiči kterých jiných procesů.

Pro lepší přehlednost můžeme ps požádat, aby pomocí ASCII znaků vykreslil hierarchii jako strom. K tomu slouží volba --forest.

ps -eH --forest | less

Tento způsob zobrazení usnadňuje sledování vztahů mezi procesy.

Výpis procesů podle jména

Výstup z ps můžeme přesměrovat do grep, abychom získali záznamy, které mají názvy odpovídající hledanému výrazu. Zde hledáme záznamy, které obsahují řetězec „firefox“:

ps -e | grep firefox

V tomto případě se zobrazí jedna položka pro proces, který nás zajímá. Pokud by bylo spuštěno více instancí Firefoxu, v seznamu by se objevilo více položek.

Zobrazení více sloupců ve výstupu

Pro přidání dalších sloupců do výstupu použijte volbu -f (plný formát).

ps -ef | less

Ve výstupu z ps se objeví další sada sloupců.

Nové sloupce jsou:

UID: ID uživatele, který proces vlastní.
PID: ID procesu.
PPID: ID nadřazeného procesu.
C: Počet podřízených procesů.
STIME: Čas spuštění procesu.
TTY: Název konzole, ve které je uživatel přihlášen.
ČAS: Množství času CPU, který proces spotřeboval.
CMD: Název příkazu, který proces spustil.

Pomocí volby -F (extra plný formát) můžeme získat ještě více sloupců:

ps -eF | less

Sloupce, které nyní získáme, vyžadují posunutí zobrazení do strany, abychom je všechny viděli.

Stisknutím klávesy „Šipka doprava“ se displej posune doleva.

Nově zobrazené sloupce jsou:

UID: ID uživatele, který proces vlastní.
PID: ID procesu.
PPID: ID nadřazeného procesu.
C: Počet podřízených procesů.
SZ: Velikost paměti RAM, kterou proces využívá (v jednotkách stránek).
RSS: Velikost rezidentní sady. Jedná se o fyzickou paměť, kterou proces používá a nelze ji odložit.
PSR: Procesor, kterému je proces přiřazen.
STIME: Čas spuštění procesu.
TTY: Název konzole, ve které je uživatel přihlášen.
ČAS: Množství času CPU, který proces spotřeboval.
CMD: Název příkazu, který proces spustil.

Výpis procesů podle ID procesu

Jakmile znáte ID procesu, který vás zajímá, můžete jej použít s příkazem ps pro zobrazení podrobností o tomto procesu. K tomu použijte volbu -p (vybrat podle ID procesu):

ps -p 3403

Zobrazí se podrobnosti o daném procesu:

Nemusíte se omezovat jen na jedno ID procesu. Můžete zadat seznam ID procesů oddělených mezerami.

Výpis procesů podle příkazu

Volba -C (příkaz) umožňuje vyhledat proces podle názvu příkazu. Tedy podle názvu příkazu, který proces spustil. To se mírně liší od příkazového řádku, který může obsahovat názvy cest a parametry.

ps -C shutter

Zobrazí se podrobnosti o procesu shutter.

Výpis procesů vlastněných uživatelem

Pro zobrazení procesů, které vlastní konkrétní uživatel, použijte volbu -u (seznam uživatelů):

ps -u mary

Zobrazí se procesy vlastněné uživatelským účtem mary.

Výpis procesů podle terminálu

Pro zobrazení procesů spojených s TTY použijte volbu -t (výběr podle TTY). Pokud je použita bez čísla TTY, volba -t zobrazí procesy spojené s aktuálním terminálovým oknem.

tty
ps -t

Příkaz tty hlásí, že se jedná o pseudo-dálnopis 0. Všechny procesy zobrazené pomocí ps -t jsou spojeny s TTY pts/0.

Pokud na příkazovém řádku zadáme číslo TTY, měli bychom získat zprávu o procesech spojených s tímto TTY.

ps -t 1

Tentokrát jsou všechny procesy spojeny s TTY pts/1.

Výběr sloupců k zobrazení

Pomocí volby -o (formát) můžete vybrat, které sloupce chcete zahrnout do výstupu z ps. Sloupce určíte podle jejich názvu. (Dlouhý) seznam názvů sloupců naleznete v manuálové stránce v části „Standardní specifikace formátu“. V tomto příkladu jsme zvolili, že se ve výstupu objeví čas CPU (pcpu) a příkazový řádek s argumenty (args).

ps -e -o pcpu,args | less

Výstup obsahuje pouze naše dva požadované sloupce.

Třídění výstupu podle sloupců

Výstup si můžete nechat seřadit pomocí volby --sort. Seřadíme výstup podle sloupce CPU:

ps -e -o pcpu,args --sort -pcpu| less

Pomlčka „-“ v parametru řazení pcpu udává sestupné pořadí řazení.

Pro zobrazení deseti procesů s největší spotřebou CPU, přesměrujeme výstup do příkazu head:

ps -e -o pcpu,args --sort -pcpu | head -10

Získáme seřazený, zkrácený seznam.

Pokud přidáme do zobrazení více sloupců, můžeme třídit podle více sloupců. Přidáme sloupec pmem, který udává procento paměti, kterou proces využívá. Bez pomlčky nebo se znaménkem „+“ je řazení vzestupné.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

Nyní máme navíc sloupec a ten je také zahrnut do třídění. První sloupec je řazen před druhým, a druhý sloupec je řazen vzestupně, protože jsme u pmem nepoužili pomlčku.

Udělejme to ještě užitečnější a přidejme do sloupce ID procesu (pid), abychom viděli číslo procesu každého procesu v seznamu.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Nyní můžeme procesy identifikovat.

Ukončování procesů podle ID procesu

Ukázali jsme si, jak identifikovat procesy podle jména, příkazu, uživatele, terminálu, i podle dynamických atributů jako je využití CPU a paměti.

Když známe ID procesu, můžeme (pokud to potřebujeme) ukončit kterýkoli z těchto procesů pomocí příkazu kill. Pokud bychom chtěli ukončit proces s ID 898, použili bychom tento formát:

sudo kill 898

Pokud vše proběhne v pořádku, proces se tiše ukončí.

Ukončování procesů podle jména

Příkaz pkill vám umožňuje ukončit procesy podle jména. Ujistěte se, že zadáváte správný název! Následující příkaz ukončí proces top.

sudo pkill top

Opět platí, že žádná zpráva je dobrá zpráva. Proces se tiše ukončí.

Ukončování více procesů podle jména

Pokud máte spuštěno více kopií stejného procesu nebo proces vytvořil řadu podřízených procesů (jako to umí Google Chrome), jak je můžete ukončit? Je to snadné, stačí použít příkaz killall.

Máme dvě kopie top spuštěné:

ps -e | grep top

Můžeme ukončit oba tímto příkazem:

sudo killall top

Žádná odpověď znamená žádné problémy, takže oba procesy byly ukončeny.

Získání dynamického zobrazení pomocí top

Výstup z ps je statický snímek. Neaktualizuje se. Pro získání aktuálního pohledu na procesy použijte příkaz top. Poskytuje dynamický pohled na procesy běžící ve vašem počítači. Displej se skládá ze dvou částí. V horní části obrazovky je oblast s informačním panelem a v dolní části je tabulka se sloupci.

Spusťte top tímto příkazem:

top

Sloupce obsahují informace o procesech:

PID: ID procesu.
USER: Jméno vlastníka procesu.
PR: Priorita procesu.
NI: Hodnota priority procesu (nice value).
VIRT: Virtuální paměť používaná procesem.
RES: Rezidentní paměť používaná procesem.
SHR: Sdílená paměť používaná procesem.
S: Stav procesu. Seznam možných hodnot je uveden níže.
%CPU: Podíl času CPU, který proces využil od poslední aktualizace.
%MEM: Podíl využité fyzické paměti.
TIME+: Celkový čas CPU využitý úkolem v setinách sekundy.
PŘÍKAZ: Název příkazu nebo příkazový řádek (název a parametry příkazového řádku). Pokud nevidíte sloupec PŘÍKAZ, stiskněte klávesu „Šipka vpravo“.

Stav procesu může být jedním z následujících:

D: Nepřerušitelný spánek.
R: Běží.
S: Spí.
T: Sledován (zastaven).
Z: Zombie.

Stiskněte klávesu „Q“ pro ukončení top.

Než ukončíte proces

Ujistěte se, že se jedná o proces, který chcete ukončit, a že to nezpůsobí žádné problémy. Zejména se vyplatí zkontrolovat volby -H (hierarchie) a --forest, abyste se ujistili, že proces nemá žádné důležité podřízené procesy, na které jste zapomněli.