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.