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.