Ří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ů rouryanglicky 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.

ID úlohy

ID úlohy – anglicky job ID je použito k identifikaci úloh shell builtinu. ID úloh začínají znakem %. %n identifikuje úlohu n, kdy %% identifikuje aktuální úlohu. Ostatní ID úloh jsou definována standardem POSIX.[4]

Související články

Literatura

Reference

V tomto článku byl použit překlad textu z článku Job control (Unix) na anglické Wikipedii.

  1. 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)
  2. Tato sekce používá syntaxi Bashe. Ostatní shelly poskytují stejnou funkcionalitu pod jinými názvy.
  3. Kód použitelný pro bash, a shelly kompatibilní s bashem
  4. IEEE Std 1003.1-2001, Section 3.203, Job Control Job ID

Externí odkazy

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.