Linuxové násroje hlavičkový obrázek

Procesy – Linux

Pochopení základních mechanizmů, jak procesy vznikají, vykonávají se a končí je nejnutnějším základem pro pokusy o programování na nižší úrovni běhu. V následujícím textu bude popsáno několik linuxových utilit, které se starají o zprostředkování informací týkajících se běžících procesů.

Základem je pochopení pojmu proces. Proces je každý program (aplikace), který v operačním systému běží. Pokud například spustíme emulátor terminálu, tak se spustí program (proces), který zobrazí terminál. Když potom v terminálu zadáme libovolný příkaz (například ls), tak se spustí proces, který vylistuje aktuální adresář, výsledky vrátí terminálu a ukončí se.

Z odstavce výše vyplývá, že každý proces musí mít nějakého vlastníka. V případě emulátoru terminálu je vlastníkem ten, kdo ho spustil (přihlášený uživatel). Každý proces má navíc svého rodiče. V příkladu výše je rodičem procesu ls proces, který spustil emulátor terminálu.

Každý proces navíc musí v systému být jednoznačně identifikován. Pro uživatele jsou procesy pojmenovány většinou podle toho, jak se jmenuje aplikace, kterou proces obstarává. Z hlediska operačního systému jsou ale procesy identifikovány pomocí PID (process id). ID se procesům přidělují sekvenčně. První spuštěný proces je vždy init s PID = 1, který je rodičem (i když třeba nepřímým) všech později spuštěných procesů.

Získat informace o právě běžících procesech je v linuxových operačních systémech vcelku lehká záležitost. Každý běžící proces má vlastní „složku“ v process file systému. K informacím zde uloženým přistoupíme například příkazem cat /proc/PID/status

$ cat /proc/9129/status 
Name:	bash
State:	S (sleeping)
Tgid:	9129
Pid:	9129
PPid:	6021
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	1000	1000	1000	1000
FDSize:	256
Groups:	4 24 27 30 46 112 119 1000 
VmPeak:	   22892 kB
VmSize:	   22828 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	    3972 kB
VmRSS:	    3956 kB
VmData:	    1920 kB
VmStk:	     136 kB
VmExe:	     900 kB
VmLib:	    2296 kB
VmPTE:	      64 kB
VmSwap:	       0 kB
Threads:	1
SigQ:	0/62220
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000010000
SigIgn:	0000000000384004
SigCgt:	000000004b813efb
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000001fffffffff
Seccomp:	0
Cpus_allowed:	f
Cpus_allowed_list:	0-3
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	674
nonvoluntary_ctxt_switches:	152

Vyčítání informací touto cestou ale není příliš efektivní. Vznikly proto utility, jako například ps, které vyčtou a zobrazí ty samé informace, ale lépe strukturované. Utilita ps má mnoho parametrů, zájemce proto odkážu na manuálové stránky, kde se dozvědí vše potřebné. Spuštění ps bez parametrů vede k výpisu všech procesů, které jsou potomkem (mají jako rodiče) aktuálního terminálu.

$ ps
  PID TTY          TIME CMD
 9129 pts/2    00:00:00 bash
 9594 pts/2    00:00:00 ps

Pro vypsání všech aktuálně běžících procesů je potřeba předat navíc parametry:

$ ps axu
  • a – všechny procesy spojené s terminálem (tty)
  • x – všechny procesy vlastněné uživatelem (společně s a vypíše úplně všechny procesy)
  • u – zobrazit výpis uživatelsky přívětivě

Nástrojů pro práci s procesy existuje ještě celá řada. Procesy se dají například sledovat podle toho, jak systém vytěžují a některé z nich poté násilně ukončit (zabít). Pro tyto aktivity slouží například utility jako top, htop, kill.


Posted

in

by

Tags: