Mi a folyamat?
A fájlrendszertől a folyamatokig...
Folyamatkezelés a Korn shellben (ksh)
Általános jellemzők
A UNIX fájlrendszere a DOS-szal összehasonlítva sokkal egységesebb: felfogása szerint minden fájl. Ez azt jelenti, hogy a felhasználó fájljai, a rendszer könyvtárkatalógusai és a rendszerhez csatlakoztatott hardver eszközök egységesen kezelendőek és egy könyvtárfára vannak "felakasztgatva".
A fájl – Unix felfogás szerint – egy strukturálatlan bájt-sorozat. Nincsen semmilyen rá vonatkozó megkötés, nincs fájlvég-jel stb. Minden fájnak van tulajdonosa, nyilván van tartva, hogy a tulajdonos mely csoport tagja (csoportmunkához). A fájlokhoz olvasási, írási, végrehajtási jogok kötődnek, amelyek külön beállíthatók a tulajdonos, a csoportja és mindenki más számára (lásd chmod). Ezenkívül a rendszer nyilvántartja a fájl hosszát, az utolsó módosítás időpontját valamint, hogy a fájlrendszer hány pontjáról hivatkozunk (könyvtárbejegyzéssel) erre a fájlra (linkszám).
Unixban a fájlnevek (manapság, általában) 255 karakter hosszúak lehetnek, tetszőleges számú elválasztó karaktert tartalmazhatnak (.), sőt érvényes név a ponttal kezdődő név is. Ezeket a rendszer némileg rejtettként értelmezi; például alapértelmezésben nem listázza és nem is törli őket (lásd ls parancs). Az ilyen fájlok gyakran különféle programok inicializációs adatait tartalmazzák.
A Unix minden esetben (paraméterekben is) megkülönbözteti a kis és nagybetűket, így például nem azonos file, File és FILE.
A futtatható állományokra nincs névbeli megkötés, akkor futtathatunk valamit, ha van rá futtatási jogunk (lásd chmod). A futtatás a név beírásával történik, ekkor a shell megkísérli bináris fájlként értelmezni és végrehajtani, ha ez nem megy, akkor shell scriptként értelmezi (a shell scriptek a DOS batch fájljaihoz állnak a legközelebb.)
A UNIX hierarchikus felépítésű, ami azt jelenti, hogy a fájlokat könyvtárakban tárolja. Egy könyvtárból alkönyvtárak nyílhatnak, amelyek ugyancsak tartalmazhatnak további fájlokat és alkönyvtárakat. A gyökérkönyvtárnak nincs neve és szülő könyvtára. A / jel jelenti a gyökeret (root), alkönyvtárai pedig az usr, home stb. Ezek a /usr, /home stb. hivatkozással érhetők el. Ezt a hivatkozást elérési útvonalnak (path name) hívják. Ez független attól az alkönyvtártól, amelyikben éppen tartózkodunk. A /usr alkönyvtárnak további alkönyvtárai vannak, például bin, etc stb. Ezek elérési útvonala /usr/bin, /usr/etc és így tovább.
/ a főkönyvtár (root), a fájlrendszer kiindulópontja
~/ a felhasználó saját könyvtára
./ az aktuális munkakönyvtár
../ az aktuális fölötti könyvtár
/dev a különféle eszközök könyvtára
/mnt az ideiglenesen „felakasztott” eszközök becsatolási pontja (lást mount)
/usr felhasználói programok, forrásszövegek, könyvtárak
/usr/bin végrehajtható programok (főként segédprogramok)
/usr/lib utasításkönyvtárak programozóknak
/usr/src forrásnyelvű szövegek
/usr/local helyileg telepített programok és tartozékaik
/usr/local/bin helyileg telepített futtathatók
Azon utasítások gyűjteménye, amelyek a fájlrendszerben való eligazodást, navigálást, könyvtárak, fájlok létrehozását, törlését és kezelését végzik.
A folyamat fogalma
A UNIX-ban megkülönböztetjük a program, a folyamat (process) és a feladat (job) fogalmát. A program a háttértárolón várakozó, végrehajtható fájl, a folyamat a program egy memóriában futó példánya, a job pedig egy végrehajtáshoz sorba állított utasítás (pl. nyomtatás). A felhasználó bejelentkezésekor elindul egy shell egy folyamatazonosítóval (PID, process identifier). Ha egy programot elindítunk, az leszármazott folyamatként (child process) indul el. Az ilyen folyamatok is egyenrangúak a szülőkkel, bizonyos paramétereket örökölnek tőlük és maguk is újabb folyamatokat indítanak.
A munka során a kiadott parancsok a DOS-hoz hasonlóan, szekvenciálisan kerülnek végrehajtásra. A DOS-szal ellentétben itt viszont mód van ún. háttérfolyamatok elindítására, ahol a parancs kiadása után a promptot azonnal visszakapjuk és az előzőleg kiadott parancs végrehajtása a háttérben folyik tovább.
A háttérfolyamat egy speciális fajtája a démon. Ezt a rendszer automatikusan indítja el és valamilyen felügyeleti szerepet lát el. Például gondoskodik a terminálvonalak figyeléséről, a nyomtatási kérelmek besorolásáról és végrehajtásáról.
ALAKJA:
ps [opciók]
Paraméter nélkül indítva egy ilyen listát kapunk:
$ ps
PID TTY STAT TIME COMMAND
49 p2 S 0:01 -ksh
208 p2 R 0:00 ps
$
A lista elemei (sorban):
-
a folyamatazonosító (PID),
- mely terminálról
adtuk ki,
- milyen állapotban van (S: sleeping, alszik;
R: running, fut; Z: zombie),
- mennyi processzoridőt vett eddig igénybe,
- milyen utasításhoz tartozik.
A ps parancs kiadása után minden futó folyamatról tájékoztatást kapunk. A ps -f paraméterezéssel a szülő folyamatok PID-jét is kiírja a program (PPID).
(CÉLSZERŰ) ALAKJA:
kill -9 processzazonosító
A processzorazonosítót megtudhatjuk például egy ps utasításból.
Folyamatkezelés a Korn shellben (ksh)
A Korn shellben egy futtatható fájl nevét beírva, előtérben indítjuk el azt. Háttérben indítható egy fájl a neve mögé tett & jellel, például:
Ez azt jelzi számunkra, hogy a shell 245-ös PID-del saját számozása szerint [1]-es jobként indította el a folyamatot. Ha 10 másodperc múlva begépelünk egy parancssort, kapunk egy plusz üzenetet is:
$
[1]+ Done sleep 10
$
Az üzenet a folyamat befejezéséről tájékoztat bennünket.
Ha egy folyamatot előtérből háttérbe szeretnénk helyezni, előbb állítsuk le Ctrl-Z-vel azt (a program a memóriában marad!). Ekkor írjuk be:
$ bg
Ennek hatására a folyamat háttérben fog futni, mígnem az fg paranccsal előtérbe nem hozzuk.
Copyright (C) Buzogány László, 2002