Proces (program)¶
Proces (anglicky process) je v informatice název pro spuštěný počítačový program. Proces je umístěn v operační paměti počítače v podobě sledu strojových instrukcí vykonávaných procesorem. Obsahuje nejen kód vykonávaného programu, ale i dynamicky měnící se data, která proces zpracovává. Jeden program může v počítači běžet jako více procesů s různými daty (například vícekrát spuštěný webový prohlížeč zobrazující různé stránky). Správu procesů vykonává operační systém, který zajišťuje jejich oddělený běh, přiděluje jim systémové prostředky počítače a umožňuje uživateli procesy spravovat (spouštět, ukončovat atp.).
V našem výkladu se omezíme pouze na uživatelské hledisko.
Popředí a pozadí¶
V následujícím textu bude užíváno pojmů “v popředí” a “v pozadí”. Tyto pojmy je nutné chápat z hlediska programů běžících v příkazové řádce, bez grafického uživatelského rozhraní. Jestliže program běží v popředí, neznamená to, že je jeho grafické okno nad ostatními okny, ale že jeho vstup je napojen na terminál.
Jestliže je terminálu (pomocí shell-u) spuštěn program (proces), znamená to, že tento proces je napojen na terminál a v tuto chvíli není možné komunikovat s shell-em.
Spustíme například příkaz xeyes. Po dobu běhu tohoto programu v terminálu
není možné komunikovat s shell-em a zadávat další příkazy.
1 2 3 4 5 6 7 | |
Klávesové zkratky¶
Ctrl+C- Proces, který je právě v popředí bude ukončen (přerušen). (Bude mu zaslán signál SIGINT)
Ctrl+Z- Proces, který je právě v popředí bude pozastaven (suspended). (Bude mu zaslán signál SIGSTOP)
Práce s procesy¶
Nyní po spuštění programu xeyes stiskneme Ctrl+Z a oči uspíme:
1 2 3 4 | |
V tuto chvíli je terminál volný pro spuštění dalších příkazů. Hned toho
využijeme a podíváme se kolik je hodin (program xclock). Program ale opět
pozastavíme pomocí Ctrl+Z.
1 2 3 4 | |
Pozastavený proce spí. Je zmražen. Vteřinová rafička hodin se nehýbe a oči
nesledují kurzor myši. Do třetice spustíme a pozastavíme program xman.
(Slouží pro čtení zobrazení manuálových stránek)
1 2 3 4 | |
Seznam procesů běžících v aktuálním shell-u vydá příkaz jobs:
1 2 3 4 | |
Příkaz fg (foreground) slouží pro přesun programu
do popředí. Program se tedy znovu napojí na terminál a je možné s ním
komunikovat nebo ukončit ho (Ctrl+C) nebo znovu pozastavit (Ctrl+Z).
Jako parametr udáváme %N, kde N je číslo procesu, které je v levém
sloupci ve výpisu jobs.
1 2 | |
Můžeme pozorovat, že vteřinová ručička hodin se opět rozběhne.
Příkaz bg (background) slouží pro přesun programu na pozadí. To znamená,
že proces poběží, ale nebude napojen na terminál a bude proto možné používat
shell nebo spustit jiný program.
1 2 3 4 5 6 7 | |
Je třeba dodat, že je nesmysl dávat na pozadí programy, které s uživatelem
interaktivně komunikují. Odstrašujícím, příkladem může celoobrazovkový
správce souborů Midnight Commander — mc.
Pomocí metaznaku &, který zapíšeme za příkaz, můžeme umístit program
(proces) na pozadí rovnou při jeho spuštění:
1 2 3 4 5 6 7 8 | |
Příkaz fg a bg umožňuje vynechat parametr s číslem procesu. Potom je na
popředí nebo pozadí umístěn program, se kterým se naposledy pracovalo a který
má v levém sloupci ve výpisu jobs znak +.
1 2 3 4 5 6 7 | |
Procesy (ne)napojené na (jiný) terminál¶
Výše popsané, lze uplatnit pouze na procesy, které běží v aktuálním shell-u. Příkaz jobs jiné procesy, které běží v jiném shell-u nebo terminálu “nevidí”.
Pokud požadujeme víc použijeme příkaz ps
1 2 3 4 5 6 7 8 | |
Číslo v levém sloupci je tzv. Process identifier PID. Je to číslo, které
proces jednoznačně identifikuje. Pokud je příkaz ps použit bez parametrů
vypisuje opět jen procesy běžící v aktuálním shell-u. Pokud přidáme parametr
-a budou vypsány všechny procesy běžící napojené na jakýkoliv terminál.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Program ps má velké množství voleb, jejichž popis najdeme v manuálové
stránce. Zde uvedeme několik příkladů:
| příklad | popis |
|---|---|
ps ux |
vypíše všechny procesy aktuálního uživatele |
ps fx |
|
ps fux |
vypíše všechny procesy aktuálního uživatele včetně stromu procesů |
ps ax |
vypíše všechny procesy všech uživatelů |
ps uxw |
|
ps uxww |
|
ps uxwww |
vypíše všechny procesy aktuálního uživatele ve tvaru jak byly zadány na příkazový řádek (každé w prozradí něco víc) |
Zasílání signálů¶
Pro zasílání signálů slouží program kill.
| signál | význam |
|---|---|
SIGTERM |
nenásilné ukončení procesu |
SIGKILL |
okamžité ukončení procesu |
SIGSTOP |
pozastavení procesu |
SIGCONT |
probuzení — pokračování procesu |
Situaci budeme ilustrovat na následujícím příkladu: Před hodinou uživatel
karel spustil náročnou úlohu pro výpočet čísla \(\pi\). Výpočet by ale nyní rád
pozastavil, protože spotřebovává všechen strojový čas a karel potřebuje na
počítači chvíli pracovat.
Nejprve zjistí PID programu:
1 2 3 | |
… a zašle signál pro pozastavení: Program kill přebírá jako parametr
PID procesu. (Nebo %N stejně jako fg a bg.)
1 | |
V tuto chvíli proces usnul a strojový čas je k dispozici jiným úlohám. Pro pokračování výpočtu potom slouží příkaz
1 | |
Pro ukončení
1 2 | |
Interaktivní správa procesů¶
Pro interaktivní správu procesů slouží program top
a jeho barevnější a vylepšená varianta htop.