Správa procesů



První uvedeme kuchařku na spouštění delších výpočtů pro uživatele, kteří se nezajímají systémové detaily.

Předpokládejme, že uživatel zamýšlí spustit program myprogram v jeho aktuálním (pracovním) adresáři. Přitom odhadovaná doba běhu je delší než doba, po kterou bude uživatel přihlášen. Odhad lze nejsnáze učinit spuštěním programu s menším množstvím vstupních dat, menším počtem iterací a podobně. Dobu běhu - a současně informace o spotřebovaných systémových zdrojích - lze získat pomocí příkazu time...

  time ./myprogram [ENTER]
  76.61user 0.00system 1:16.68elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
  0inputs+0outputs (92major+11minor)pagefaults 0swaps
  
Poznámka. To, že se jedná o spustitelný soubor, si může uživatel snadno ověřit...
  file myprogram [ENTER]
  myprogram: ELF 32-bit LSB executable, Intel 80386, version 1,
             dynamically linked (uses shared libs), stripped
  

Řekněme, že odhad doby běhu programu myprogram s reálnými daty a dostatečným počtem iterací byl učiněn na 50 hodin. Uživatel musí při spuštění tohoto programu především zajistit, aby běžel na pozadí. Pokud by totiž spustil program "normálně" na popředí, musel by s další činností v shellu (tedy i s odhlášením od systému!) čekat až do skončení programu, tedy přibližně dva dny. Umístění programu na pozadí pomocí "ampersandu" &...

  ./myprogram & [ENTER]
  [1] 766
  $ _
  

vlastně vyvolá paralelní činnost spuštěného programu myprogram a shellu, který okamžitě poskytne prompt k zadávání dalších příkazů. Dále, program myprogram může vypisovat zprávy na "obrazovku". Tyto by rušily další souběžnou práci uživatele a je vhodné je přesměrovat z "obrazovky" do souboru, viz Správa vstupů a výstupů,...

  ./myprogram > mylogfile &
  

Posledním problémem, který musí uživatel vyřešit, je ukončení všech jeho běžících programů (prací, procesů) při odhlášení od systému. Tato jinak výhodná funkce je zřejmým nepřítelem našeho dlouho běžícího programu myprogram. Operační systém UNIX je však navržen inteligentně a pamatuje i na tyto případy. Uživatel má k dispozici příkaz nohup, který řeší nejen problém odhlášení, ale také přesměrování standardního výstupu spuštěného programu. Příkaz...

  nohup ./myprogram & [ENTER]
  [1] 782
  nohup: appending output to `nohup.out'
  $ _
  

způsobí start programu ./myprogram, jeho umístění na pozadí, přesměrování standardního výstupu do souboru ./nohup.out a poskytne "kurzor" pro další práci, například pro odhlášení od systému. Předchozí konstrukce navíc zajistí, že po odhlášení uživatele _nebude_ jeho proces zrušen - bude pokračovat až do ukončení své činnosti. Pokud by příkazová řádka obsahovala další členy, například modifikátor priority `nice' před jménem programu nebo parametry a argumenty programu za jménem programu, _MUSÍ_ být sestavena tak, aby příkaz `nohup' byl _první_ a operátor `ampersand' _poslední_. Pokud program ./myprogram provádí nějaké souborové operace, například čte data ze vstupního souboru a ukládá výsledky do výstupního soubory, _nebudou_ tyto operace příkazem `nohup' žádným způsobem ovlivněny. Na závěr podotkněme, že běžící programy se obvykle nazývají procesy.

Pro další informace viz manuálové a INFO stránky shellu `bash' a příkazů `nohup', `nice', `time', `ps', `pstree', `top'. Viz také literaturu v tištěné podobě.


TODO: procesy a jejich správa, vlastník, priorita, ..., příkazy ps, pstree, top, ..., signály, příkaz kill, ..., IPC