Administrace procesů

První proces, který se po startu Linuxu spouští je init. Ten pak spouští další programy. Každý program běží ve svém vlastním procesu a navíc může spouštět další procesy (platí, že běžící progarm se skládá z jednoho až n procesů). V této kapitole je popsáno, jak zjistit, které procesy běží, kolik zabírají paměti, jak spouštět procesy na pozadí atd.

Seznam procesů

Program ps

Progarm ps vypíše na obrazovku terminálu informace o všech aktivních procesech.

Výpis obashuje:

PID
identifikační číslo procesu
TTY
číslo terminálu ze kterého byl proces spuštěn
TIME
Celkový čas procesu spotřebovaný procesorem
COMMAND
jméno přikazu, který je procesem prováděn.

SYNOPSIS

ps [-options] # standardni syntax
ps [options]  # bsd syntax

Program ps podporuje dva způsoby zadávání voleb. Standardní a BSD. U standardního způsobu začínají volby pomlčkou, u BSD jsou bez pomlček.

Standardní a BSD volby často znamenají něcojiného. Takže příkaz ps -a a ps a vypíšou něco jiného.

STANDARD OPTIONS

-a
zobrazí se stavové informace o všech aktivních procesech, které jsou řízeny nějakým terminálem (jinak jen procesy aktuálního shellu).
-e
zobrazí se stavové informace o všech procesech.
-l
Zobrazí se úplná stavová informace, která je rozčleněna do sloupců:
Fflag procesu
Sstav procesu
UIDidentifikace vlastníka procesu
PIDidentifikační číslo procesu
PPIDidentifikační číslo rodičovského procesu
Cvyužití procesoru (využívá se pro plánování procesů)
PRIpriorita procesu. Vyšší číslo znamená nižší prioritu
ADDRpaměťová nebo disková adresa procesu
SZvelikost obrazu procesu v blocích
WCHANzobrazuje událost, na kterou proces čeka. U běžícího procesu je tato položka prázdná.
TTYjméno terminálu, který řídí proces
TIMEčas v sekundách, po který se proces vykonává
CMDnázev programu, který proces spustil
-f
Jako příkaz ps -l, neobsahuje všechny sloupce, navíc má sloupec STIME, který obsahuje čas, kdy byl proces spuštěn. V sloupci COMMAND se zobrazí celý příkazový řádek, jak byl proces spuštěn. Vhodné je použít např. ps -af
-u login
Zobrazí se informace o procesech uživatele login
-t jmeno_termynalu
Zobrazí se procesy spojené se zadaným terminalem. Například: ps -ttty01
Příkaz ps -t"?" zobrazí procesy nespojené z žádným terminálem (tzv. démoni).
--sort %cpu
Setřídí procesy podle vytížení procesoru. Místo %cpu může být %mem (paměť) a ještě spoustu dalších možností, viz manuálové stránky.

BSD OPTIONS

ax
Zobrazí všechny procesy
u
Přidá do výpisu sloupce s dalšími informacemi (vlastník procesu atp.)

EXAMPLES

ps aux
Vypíše všechny běžící procesy
ps -ejH
Vypíše strom procesů - procesy spuštěné jiným procesem jsou vypsané pod svým rodičem odsazené o několik znaků doprava.
ps aux | head -n 1; ps aux --sort %mem | tail
Vypíše 10 nejnáročnějších procesů na paměť

Program pstree

Program pstree zobrazí seznam procesů jako „strom“.

Linux po načtení jádra spouští proces init, který má na starosti spouštění dalších procesů. Zobrazený strom procesů tak vždy začíná programem init, pod kterým jsou zobrazeny jím spuštěné procesy.

SYNOPSIS

pstree [-p]

OPTIONS

-p
Zobrazí id procesů (PID). Pokud program spustí několik procesů, každý proces je zobrazen zvlášť (defaultně je zobrazen jen jednou a je před ním napsáno, kolikrát je proces spuštěn. Například 6*[getty] znamená, že je spuštěn 6 x proces getty, což je program, který na konzoli čeká na jméno a heslo, aby vás přihlásil do systému).

Program top

Program top zobrazuje běžící procesy a interaktivně zobrazení mění.

Příkazy

q
Ukončí program top
h
Zobrazí nápovědu (popis všech příkazů)
z
Seznam procesů bude barevný
x
Sloupec, podle kterého se procesy třídí, se zvýrazní (má smysl jen u barevného výstupu)
<
Třídící sloupec bude předchozí
>
Třídící sloupec bude další
W
Zapíše aktuální nastavení programu (obarvování výstupu, vybraný třídící soupec atd.) do konfiguračního souboru ~/.toprc.

Program iotop

Program iotop zobrazuje běžící procesy, podobně jako top, které vytěžují disk (input/output). Program obvykle není nainstalován v základu distribuce, musí se doinstalovat (z balíčků).

Ke spuštění je potřeba mít oprávnění superuživatele.

Příkazy

o
Zobraz jen procesy, které aktuálně něco čtou/zapisují.

Řízení úloh

Úlohy na pozadí

Některé dlouhotrvaící úlohy, které nevyžadují interakci od uživatele, je možné spustit na pozadí. Úlohy spuštěné na pozadí neblokují shell, takže je možné ihned zadávat další příkazy, bez čekání na dokončení úlohy. Typicky se to používá třeba pro kopírování nebo přesouvání většího množství dat. Uživatel pustí úlohu na pozadí, nemusí čekat na její dokončení, ale může rovnou zadávat další příkazy. Úloha po svém skončení o tom vypíše informativní hlášku na terminál.

Libovolnou úlohu lze spustit na pozadí, pokud se na konec příkazu umístí znak &.

Příklad spuštění kopírování souborů na pozadí:

$ cp -r a_huge_dir/ /media/usb/ &
[1] 79

[1] - identifikuje úlohu v rámci shellu (bash), ve které byla spuštěna.
79 - PID (viz. výše příkaz ps) identifikuje úlohu jako proces v rámci OS.

Zkratka CTRL+z pozastaví program běžící na popředí a přesune jej na pozadí a pozastaví. To se hodí, pokud nějaký program pustíte na popředí (bez & na konci) a pak si to rozmyslíte. Proces se i pozastaví, takže je vhodné jej znovu spustit příkazem bg viz dále (program bude pokračovat od místa kde byl přerušen, takže se nemusíte bát, že by začalo třeba to kopírování od znova).

Program jobs vypíšee seznam úloh na pozadí.
Příkaz bg n spustí n-tou pozastavenou úlohu na pozadí (n je číslo v [] viz výše)
Příkaz fg n spustí n-tou pozastavenou úlohu na popředí

Zabíjení procesů

Proces, který nefunguje jak má, nebo jej chcete ukončit z jiného důvodu, a který běží na popředí lze zabít klávesovou zkratkou CTRL+c.

Další možností zabíjení (násilného ukončování) jsou programy kill a killall. Program kill se používá pro posílání signálů procesům. Jeden z těchto signálů může být “zabij se“.

Program kill posílá signály procesům podle jejich ID (id je jedinečný identifikátor, který má vždy jen jeden proces). Program killall podle jejich názvu (může běžet více procesů stejného jména, signál se posílá všem, proto kill all).

SYNOPSIS

kill [SIGNAL] PID
kill -l
killall [-SIGNAL] jmeno_procesu [jmeno_procesu ...]

Pošle signál SIGNAL procesu číslo PID, resp. procesu se zadaným jménem. Signál se obvykle zadává jako číslo, ale signály mají i svá jména.

Procesům je možné posílat mnoho druhů signálů. Pokud je proces naprogramován tak, aby signál zachytil, může na jeho základě vykonat nějakou akci (jakou, záleží program od programu). Jediný signál, který program nemůže nikdy zachitit je signál 9 (SIGKILL), který proces ukončuje.

Tabulku všech existujících signálů vypíše příkaz kill -l.

PID zjistíte například programem ps. (Nejedná se o číslo úlohy spuštěné na pozadí).

EXAMPLES

kill PID
Pošle procesu PID signál, že se má ukončit
kill -9 PID
Ukončí proces na 100% (kill procesu posíla signál 9, viz číslo za pomlčkou. Jen 9 (SIGKILL) nemůže proces zachytit)
kill -9 0
Ukončí všechny procesy a odhlásí uživatele od systému (zabitím rodiče zabijete i všechny potomky
kill SIGNAL PID
SIGNAL je signál, který lze procesu poslat. Např. SIGKILL je signál č. 9, SIGTERM = 5 (požadavek na ukončení programu), SIGHUP = 1 (požadavek na znovunačtení konfiguračních souborů programu) atd.
Jakým signálům program rozumí se dočtete většinou v jeho manuálové stránce.

Změna priority procesů

Na změnu priority procesů se používá program nice. Priorita rozhoduje o tom, jak často bude procesu přidělen procesor. Běžný uživatel může prioritu svým procesům jen snižovat, superuživatel root i zvyšovat.

SYNOPSIS

nice [zmena priority] prikaz_a_jeho_argumenty

Čím nižší číslo priority, tím vyšší priorita. Normální proces má prioritu 20. Změna priority je možná od -1 až do -19. Bez uvedení změny priority se impliciňe sníží o 10 (tj číslo priority se zvýší). Správce systému může priorítu zvýšit, tj snížit číslo priority, např. --4 (pomlčka a mínus 4).

EXAMPLES

$ nice -19 tar cvf /dev/rmt/0m /home/databaze &
$ nice --18 find /tmp/ -atime +7 -exec rm {} \;

S prioritou vyšší o 18 (to může nastavit jen root) se hledají v adresáři /tmp soubory, ke kterým se nepřistupovalo alespoň jeden týden a smažou se.

Příkaz nohup

Proces poběží i po odhlášení ze systému (normálné se všechny procesy po odhlášení z terminálu ukončí).
Pokud není výstup přesměrován, výstup (i standardní chybový výstup) se posílá do souboru nohup.out v pracovním adresáři. Pokud nemáme právo zakládat v pracovním adresáři nové soubory, soubor nohup.out se vytvoří v domovském adresáři.

SYNOPSIS

nohup prikaz_a_argumenty &

EXAMPLES

$ nohup mv file1 file2 >vysledky 2>chyby &

Program mv se spustí na pozadí. Odhlášením z shellu se program neukončí (přesun souboru bude pokračovat až do zdárného konce - pokud teda nikdo nevypne počítač).

Program chroot

Program chroot spustí příkaz (například shell) se změněným kořenovým adresářem /. Takto spuštěný příkaz nemá šanci opusit zadaný adresář.

Program chroot se používá z bezpečnsotních důvodů, nebo, pokud nastartujete záchraný systém (z CD nebo diskety), pak připojíte disk do nějakécho adresáře a pomocí chroot nastavíte přimountovaný disk jako kořenový adresář. Programy pak operují v rámci chrootovaného disku a ne v rámci záchraného systému.

SYNOPSIS

chroot cesta_k_novemu_korenovemu_adresari   prikaz a argumenty prikazu

EXAMPLES

$ mkdir newroot
$ cp -r /bin /lib /usr newroot
$ chroot newroot
Příkazy spouštějte s právy superuživatele (root).
Komentář Hlášení chyby
Created: 31.7.2013
Last updated: 3.6.2015
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..