|
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
|