dum | žák

Linux

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu VY_32_INOVACE_21_PSS_413
Název tématické oblasti (sady) Operační systémy
Název materiálu Správa procesů
Anotace Materiál popisuje rozdíl mezi aplikacemi a službami v systému. Demonstruje aktivaci a deaktivaci démonů. Nakonec ukazuje možnosti sledování procesů a jejich vytížení CPU.
Autor Ivan Pomykacz Jazyk český
Očekávaný výstup Aktivuje a deaktivuje služby/démony. Získá informace o běžících procesech. Ukončuje proces nebo službu. Rozumí přenášení uživatelských práv na proces/službu.
Klíčová slova proces, služba daemon, PID, monitorování
Druh výukového zdroje Výklad Věková skupina žáků 17+
Typ interakce aktivita Ročník 3.
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) 15.4.2014 Celková velikost

pdf icon
Správa procesů

Obsah

Spouštění procesů a služeb (démonů)

To jak se spouští běžné programy už víme. Zpravidla se nacházejí v cestách uvedených v proměnné $PATH. Nebo je spouštíme zadáním relativní nebo absolutní cesty.

Spuštěný program má práva uživatele, který jej spustil (většinou). V některých případech tomu tak není, např. u programu passwd (pro změnu hesla). Výjimka u passwd je proto, že program provádí změny v souboru /etc/shadow, a do tohoto souboru má práva zápisu pouze root.

Služby neboli démoni (daemons) jsou speciální procesy, které běží v systému na pozadí. Spouští se zpravidla při startu systému procesem init nebo jiným (systemd, dle distribuce linuxu). Služba může běžet s právy uživatele root, ale z bezpečnostních důvodů se spouští pod tzv. neprivilegovaným uživatelem. Totiž takovým uživatelem, který nemá v systému zbytečně vysoká oprávnění.

Spouštění a ukončování služeb lze ručně ovládat příkazem service.

Programy vs služby

Běžné programy od služeb (démonů) se liší především tím, že disponují nějakou formou GUI, případně TUI a nebo jen CLI. Služba zpravidla jen zprostředkovává, nabízí (servíruje, odtud server) nějakou ... službu, kterou pak využívají konkrétní aplikace. Např. službu na servírování webových stránek zajišťuje apache. K prohlížení webových stránek je však potřeba webový prohlížeč (např. Mozilla Firefox).

Zatímco programy se spustí, udělají co je třeba, a následně se ukončí (uživatel je ukončí), tak služby jsou navrženy tak, aby běžely neustále. Nikdo vám ovšem nebrání spustit Firefox a nechat jej běžet několik dní nebo i déle.

Programy na pozadí

Pokud pracujeme v GUI, pak toto nemá moc smysl řešit. Grafické uživatelské prostředí je navrženo tak, abychom mohli spouštět více aplikací, tyto pak třeba minimalizovat a zase zpětně je vyvolat podle potřeby.

Pokud jsme v konzoli, tak je situace trochu jiná. Spustíme-li např. stahování souboru příkazem wget (curl), pak se příkazová řádka odmlčí do doby, než se stahování dokončí, a teprve potom budeme moci zadávat další příkazy.

Ano, je možné se přihlásit v další konzoli (Alt+F2), a potom v další a další, dokud nám nedojdou. Nebo můžeme program spustit přímo na pozadí.

Ukažme si to na příkladu s programem sleep. Při spuštění program s parametrem 10s dojde k odmlčení programu na 10 vteřin a následně skončí.

tux@wheezy:~$ sleep 10s

Pokud bychom chtěli ihned po spuštění programu pokračovat psaním dalších příkazů, musíme spustit program sleep na pozadí. To lze provést pomocí &, který zapíšeme na konec příkazu:

tux@wheezy:~$ sleep 10s &
[1] 29115
tux@wheezy:~$

Program se spustí na pozadí a jakmile skončí, automaticky se ukončí. To zjistíme mj. tím, že stiskneme klávesu Enter a shell nás informuje, že aplikace na pozadí skončila.

tux@wheezy:~$
[1]+  Dokončena              sleep 10s
tux@wheezy:~$

Služby (aka démoni)

Služba je vlastně též program, který se umí většinou sám démonizovat, tj. spustit na pozadí. Nicméně tyto programy nespouštíme přímo, ale pomocí nástroje service, který spustí připravený skript pro nastartování požadované služby.

Např. služba pro konfiguraci sítě. Je to sice trochu atypický příklad, ale jde o princip.

Následující příkaz provede zastavení (zneplatnění) konfigurace sítě, tj. připojení k síti přestane fungovat. Všimněte si, že pouze root může zastavovat nebo spouštět služby.

root@wheezy:~# service networking stop

Opětovné spuštění/aktivace se provede příkazem:

root@wheezy:~# service networking start

Pokud má služba svůj init skript, pak je možné ji tímto způsobem spouštět nebo zastavovat.

Aktivace/Deaktivace služeb

Samotnou kapitolkou je pak aktivace, resp. deaktivace služby, aneb jak zařídit, aby se služba spouštěla při startu systému nebo naopak nespouštěla.

Za tímto účelem je tu pomocný skript update-rc.d.

root@wheezy:~# update-rc.d isc-dhcp-server disable

Obdobně, jako je deaktivace se provádí aktivace klíčovým slovem enable.

root@wheezy:~# update-rc.d isc-dhcp-server enable

Monitorování procesů

Pokud nás zajímá, co se se systémem zrovna děje - alespoň z hlediska procesů - pak se nám budou hodit nástroje jako: uptime, ps, top (htop).

Jde o jednoúčelové utility pro sledování procesů a jejich vytěžování systémových zdrojů (zejména operační paměť a procesor).

uptime

Příkaz vypíše jak dlouho systém běží bez restartu a průměrnou zátěž systému.

root@wheezy:~# uptime
 12:50:53 up 286 days, 12:02,  1 user,  load average: 0.08, 0.02, 0.01
root@wheezy:~#

ps

Podrobnější informace nabídne nástroj ps. I když v základu (bez přepínačů při spuštění) toho zas až tak moc nevypíše.

root@wheezy:~# ps
  PID TTY          TIME CMD
 3159 pts/0    00:00:00 bash
 3724 pts/0    00:00:00 ps
root@wheezy:~#

Z výpisu lze vyčíst PID - identifikátor procesu (ten se nám bude hodit až budeme procesy ukončovat příkazem kill). TTY je označení virtuálního terminálu a TIME je využitý čas na CPU.

Všimněte si, že ve výpisu je pouze bash a ps. bash je příkazový shell, ze kterého jsme spustili příkaz ps a jelikož i ps v době zjišťování běžících procesů běžel, je uveden rovněž ve výpisu.

Podrobnější informace lze zobrazit přepínačem -f. Tady pozor, příkaz ps má poněkud starší historii a jeho použití se liší v používání přepínačů, které zdědil od různých systémů (zejména BSD a UNIX). Např. příkaz ps axu je podobný jako ps -ely. Co z toho vyplývá je, že v různých tutoriálech se objevují různé příklady téhož.

root@wheezy:~# ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root      6356  5847  0 12:56 pts/2    00:00:00 /bin/bash
root      6722  6356  0 13:29 pts/2    00:00:00 ps -f
root@wheezy:~#

Výše už je alespoň vidět, kdo proces vlastník (UID), identifikátor rodičovského procesu (PPID), využití CPU (C), čas spuštění procesu (STIME) a celou cestu k programu (CMD).

Ve výpisu je ovšem stále poněkud málo procesů. Na průměrném systému je něco kolem stovky aktivních procesů. Výpis výše obsahuje pouze procesy v dané terminálové relaci. Vyzkoušejte příkazy:

root@wheezy:~# ps -e
root@wheezy:~# ps -ef

top, htop

root@wheezy:~# top
top - 13:40:50 up  5:01,  4 users,  load average: 0.06, 0.20, 0.21
Tasks: 194 total,   4 running, 190 sleeping,   0 stopped,   0 zombie
Cpu(s):  3.2%us,  1.1%sy,  0.0%ni, 94.6%id,  1.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2052200k total,  1915736k used,   136464k free,    93480k buffers
Swap:  2928636k total,     2580k used,  2926056k free,   619804k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 5414 tux       20   0  729m 243m  44m S    6 12.1   1:05.39 firefox
 1768 root      20   0 28572 4020 3188 R    2  0.2   0:02.30 upowerd
 2546 root      35  15  6652 4132  956 R    2  0.2   0:13.91 preload
    1 root      20   0  3740 2128 1352 S    0  0.1   0:00.90 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:01.08 ksoftirqd/0
    5 root      20   0     0    0    0 S    0  0.0   0:04.86 kworker/u:0
    6 root      RT   0     0    0    0 S    0  0.0   0:00.09 migration/0
    7 root      RT   0     0    0    0 S    0  0.0   0:00.14 watchdog/0
    8 root      RT   0     0    0    0 S    0  0.0   0:00.05 migration/1
   10 root      20   0     0    0    0 S    0  0.0   0:00.85 ksoftirqd/1
   12 root      RT   0     0    0    0 S    0  0.0   0:00.12 watchdog/1
   13 root       0 -20     0    0    0 S    0  0.0   0:00.00 cpuset