U N I X
Autor : ing. Ales Limpouch, KP FEL CVUT Praha
3. Procesy

Procesem se v Unixu rozumi provadeny program vcetne dat (image).
Kazdy proces je z hlediska uzivatele jednoznacne identifikovan
svym identifikacnim cislem PID (process identifier). Specialni
systemove procesy, ktere nenalezeji zadnemu uzivateli a resi
ruzne systemove problemy (napr. sdileni prostredku systemu) se
v Unixu nazyvaji demoni (daemons).
 

3.1 Procesy a soubory

Proces od sveho rodicovskeho procesu (napr. shellu) zdedi radu
vlastnosti, mj. argumenty a tzv. prostredi procesu a vsechny
soubory otevrene rodicovskym procesem. Dedenim od zakladniho
procesu terminalu ziska kazdy proces tri zakladni soubory.
Tyto tri zakladni soubory jsou otevreny jako standardni vstup,
standardni a chybovy vystup (obvykle pro terminal uzivatele).
Pro tyto tri zakladni soubory jsou pouzity deskriptory 0, 1 a 2.

Pri interpretaci shell rozdeli prikaz na jmeno prikazu a jeho
argumenty. Dale hleda soubor se jmenem prikazu. Ten se hleda
v adresarich, ktere obsahuje promenna shellu PATH. Je-li
nalezeny soubor proveditelny, je vytvoren novy proces.
Z prikazu jsou dale pri zavadeni programu interpretovany
argumenty, ktere umoznuji uzivateli presmerovat standardni
soubory:

<file presmerovani standardniho vstupu do file
>file presmerovani standardniho vystupu do file
>>file presmerovani standardniho vystupu
pripojujici vystup na konec souboru file
<<'slovo' here document (data nasleduji bezprostredne
v souboru); prenos znakove bez nahrady
slovo je omezovac urcujici konec dat
<<\slovo here document
<<slovo here document; provadi se nahrada $,`...`,\

specialne pro Bourne shell:

n>file presmerovani vystupu s deskriptorem n
do file (2 chybovy vystup)
n>>file presmerovani vystupu s deskriptorem n
pripojujici vystup na konec souboru file
n>&m spojeni vystupu s dekriptory n a m
n<&m spojeni vstupu s dekriptory n a m
<&- uzavreni standardniho vstupu
>&- uzavreni standardniho vystupu

specialne pro C-shell:

>&, >>& presmerovani chyboveho vystupu a pripojeni
k standardnimu vystupu (spojeni deskriptoru)

Tyto argumenty prikazu pak nejsou jiz predany procesu. Oblibenym
typem programu v Unixu je program, ktery cte data ze standardniho
vstupu a po zpracovani je predava na standardni vystup. Tento typ
programu je oznacovan jako filtr.

Prednost filtru se objevi ve spojeni s dalsim mechanismem Unixu,
kterym je odstraneni pomocnych souboru. Tento mechanismus se
nazyva roura (pipe) a jde o systemovou vyrovnavaci pamet, do
ktere jeden proces data uklada a dalsi je z ni odebira.

Pro oznaceni tohoto mechanismu se pouziva oddelovace "|":

command1 | filtr
kde prikaz "command1" zapisuje svuj vystup do roury, ze ktere jsou
ctena prikazem "filtr", ktery pak vysledky vypisuje na standardni
vystup. Prikazy spojene rourou se nazyvaji kolona. Kolona muze
obsahovat nekolik clenu, ktere si predavaji sve vysledky.
Specialne pro C-shell lze presmerovat do roury i chybovy vystup
pomoci znaku oddelovace "|&".


3.2 Zakladni prikazy pro praci s procesy

Na prikazovem radku je mozno zadat provedeni vice prikazu. Jednou
z moznosti bylo vyse uvedene spojeni prikazu do kolony. Dale je
mozno zadat podobnym zpusobem sekvencni zpracovani prikazu pomoci
oddelovace ";". Pri tomto zpusobu spousteni procesu se vzdy ceka
na dokonceni jednotlivych procesu nebo cele kolony (procesy v ni
bezi paralelne). UNIX poskytuje uzivateli moznost spusteni noveho
procesu, pri kterem rodicovsky proces (shell) neceka na jeho
dokonceni a oba procesy pokracuji nezavisle na sobe. Pro oznaceni
tohoto mechanismu se pouziva znak "&". Je-li tento znak uveden
na konci prikazoveho radku, potom se vypisi identifikacni cisla
spustenych procesu a ihned se vypise vyzva shellu. Pro urceni
poradi interpretace prikazu na radce lze pouzit zavorek "(" a ")".
Takto ohranicena skupina prikazu je provedena novou kopii shellu.

Prikazy pro praci s procesy:

sleep [n] pozdrzeni vykonani procesu o n sekund
wait cekani na dokonceni vsech procesu
kill PID predcasne ukonceni procesu s cislem PID
ps [-ag] vypis informaci o bezicich procesech
(soucasti je i PID procesu)
a vsechny procesy vsech uzivatelu
g vsechny procesy

nice command provedeni prikazu command se snizenou prioritou
nohup command provedeni prikazu command, ktery nelze
ukoncit z prerusenim z klavesnice nebo
ukoncenim shellu
at time command provedeni prikazu command v zadanem case
time command mereni doby provedeni procesu command


3.3 Shell a zakladni systemove prikazy

Interpret uzivatelskych prikazu (shell) je jednim ze zakladnich
systemovych programu. Nachazi se obvykle v souboru "/bin/sh"

(Bourne shell) a "/bin/csh (C-shell) a muze byt vyvolavan
rekurzivne. Prikazy cte ze standardniho vstupu. Tohoto lze
vyuzit k provedeni sady prikazu ulozenych v textovem souboru
(tzv. scenari - scriptu). Pokud ma scenar nastaven priznak
proveditelnosti, potom neni treba spoustet shell (to zaridi
automaticky system). Shell lze z pohledu uzivatele-programatora
povazovat za velmi vykonny programovaci jazyk, ktery umoznuje
pomoci standardnich konstrukci a prikazu vykonat neobvykle slozite akce.

Zakladni systemove prikazy:

sh [flags] file [args]
spusteni Bourne shellu s argumenty args
csh args spusteni C-shellu s argumenty args
who [am I] informace o prihlasenych uzivatelich
am I pouze o aktualnim uzivateli
date informace o aktualnim datumu a case
passwd zmena uzivatelskeho hesla
echo [-n] args opis argumentu na standardniho vystupu
n bez znaku konec radku
man str vypis informace (napovedy) o str
man -k keyword vypis souhrnu jednoradkovych informaci

podle klice keyword
tee file T-odbocka z roury do souboru (filtr)

write user [tty] prikaz pro rozhovor s uzivatelem user
na terminalu tty
(! cmd prikaz pro shell)
mail elektronicka posta