Řízení úloh (Unix)
V operačních systémech podporujících vykonávání více procesů paralelně nebo sériově (dávkovém zpracování), řízení práce – anglicky job control odkazuje na správu více dávkových úloh.
Unixový shell
Při použití Unixu nebo odvozeného operačního systému pomocí terminálu bude mít uživatel zpočátku jen jeden běžící proces a to jejich přihlašovací shell. Většina úloh (výpis složek, editace souborů, atd.) může být jednoduše dosažena tak, že necháme příslušný program převzít kontrolu nad terminálem, který ji při ukončení zase vrátí. Nicméně, někdy bude uživatel chtít provádět úlohu na pozadí a používat terminál k jinému účelu. Řízení práce je vyvinuté dovolit uživateli spouštět programy na pozadí, posílat programy do pozadí, vracet procesy zpět do popředí, a spouštět a ukončovat běžící programy. Procesy pod kontrolou řízení práce nazýváme úlohy – anglicky jobs.
Historie
Řízení práce bylo poprvé implementováno v C shellu Jimem Kulpem,[1] dále pak institutem IIASA v Austrálii použitím vlastností 4.1 BSD jádra. Korn shell vyvinutý v Bell Labs jej převzal a bylo později začleněno do verze SVR4 Bourne shellu a existuje ve většině dnešních unixových shellů.
Implementace
- Typicky si shell uchovává seznam úloh v tabulce úloh – anglicky job table. Úloha se skládá ze všech členů roury – anglicky pipeline. Tedy všechny procesy tvořící úlohu budou ve stejné skupině procesů.
- Program může být spuštěn jako úloha na pozadí přidáním
&
[2] do příkazového řádku. Jeho výstup je směrován do terminálu (potenciálně prokládaný výstupem jiných programů), ale nemůže číst jeho vstup. - Úloha běžící na pozadí může být ukončena zadáním pozastavujícího znaku (Ctrl-Z). To pošle procesové skupině SIGTSTP a vrátí kontrolu shellu.
- Zastavená úloha může být obnovena jako úloha na pozadí pomocí bg builtin nebo jako úloha v popředí pomocí fg. V obou případech shell vhodně přesměruje I/O a pošle SIGCONT procesu.
jobs
vypíše procesy běžící na pozadí z tabulky úloh, spolu s jejím číslem úlohy a stavem (zastavený nebo běžící).kill
(nikoliv/bin/kill
) můžeme vyslat úloze pomocí jejího ID stejně jako ID procesu: úlohy specifikované jejich ID mohou být ukončeny pomocí prefixu „%
“.[3]Kill
může vyslat úloze jakýkoliv signál. Nicméně v případě, že záměrem je zbavit systém procesů jsou signály SIGKILL a SIGTERM (výchozí) pravděpodobně nejvíce použitelné. Úloha běžící v popředí může být trvale přerušena zadáním ukončovacího znaku (Ctrl-C).disown
může být použit k odebrání úlohy z tabulky úloh čímž ji změníme na démona, který může pokračovat v běhu po odhlášení uživatele.
Související články
Literatura
- Marshall Kirk McKusick and George V. Neville-Neil. The Design and Implementation of the FreeBSD Operating System. [s.l.]: Addison Wesley, 2004-08-02. Dostupné online. ISBN 0-201-70245-2. Kapitola FreeBSD Process Management: Process Groups and Sessions. (anglicky)
Reference
V tomto článku byl použit překlad textu z článku Job control (Unix) na anglické Wikipedii.
- Foreword by Bill Joy in ANDERSON, Gail, Paul Anderson. The UNIX C Shell Field Guide. [s.l.]: Prentice-Hall, 1986. Dostupné online. ISBN 0-13-937468-X. S. xvii. (anglicky)
- Tato sekce používá syntaxi Bashe. Ostatní shelly poskytují stejnou funkcionalitu pod jinými názvy.
- Kód použitelný pro bash, a shelly kompatibilní s bashem
- IEEE Std 1003.1-2001, Section 3.203, Job Control Job ID