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ů:
F flag procesu S stav procesu UID identifikace vlastníka procesu PID identifikační číslo procesu PPID identifikační číslo rodičovského procesu C využití procesoru (využívá se pro plánování procesů) PRI priorita procesu. Vyšší číslo znamená nižší prioritu ADDR paměťová nebo disková adresa procesu SZ velikost obrazu procesu v blocích WCHAN zobrazuje událost, na kterou proces čeka. U běžícího procesu je tato položka prázdná. TTY jméno terminálu, který řídí proces TIME čas v sekundách, po který se proces vykonává CMD ná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říkazps -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 procesgetty
, 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í:
[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 --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
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
$ cp -r /bin /lib /usr newroot
$ chroot newroot