OPERÁCIÓS RENDSZEREK II GYAKORLAT
4. óra: Folyamatok
Windisch Gergely
[email protected] 2010 / 2011 tavaszi félév
FOLYAMATKEZELÉS ALAPOK
linuxban minden, amit elindítunk, az egy folyamat. a folyamatokat a folyamat azonosító process ID, PID azonosítja (pl: 4225) hierarchikus rendszert alkotnak
minden folyamatnak van egy szülője - az a folyamat, ami őt indította 1-es PID-vel az init nevű folyamat rendelkezik, ő indítja a rendszert, vezérel
FOLYAMATOK
a folyamat futhat előtérben vagy háttérben ha háttérben szeretnénk futtatni, akkor a parancs után &-t kell tenni −
Ha egy folyamat az előtérben fut, akkor azt a ctrl+z billentyűkombinációval lehet lestoppolni. Újraindítás − −
rm -R /* & - minden elvész, de közben dolgozhatunk legalább
fg: előtérbe hozza a parancsot bg: háttérben indítja újra a parancsot
Az fg és bg az utóljára leállított parancsokat indítják újra. Ha több is van: fg %2 – a kettes számú parancsot indítja
FOLYAMATOK ÁLLAPOTA
FOLYAMATOK ÁLLAPOTA (2)
running, sleeping, stopped zombie −
olyan folyamat, ami befejezte a futást (önként, vagy felkérésre), de a szülő folyamat még nem tudta kiolvasni a kilépési adatokat
orphan −
olyan folyamat, ami elveszítette szülő folyamatát
PRIORITÁSI RENDSZER
A prioritás határozza meg, hogy az ütemező melyik folyamatot fogja legközelebb a processzorra helyezni. nice érték 40 elemű skála -20 -> +19 − −
-20: a legkevésbé nice, vagyis a legnagyobb prioritású +19: legnájszabb, legalacsonyabb prioritás
Indításkor a szülő kedvességét öröklik, felfele növelhető, lefele nem. nice -n 5 /bin/akarmi
TOP
Futó folyamatok lekérdezése: −
Látni lehet: memória használatot, processzor használatot, folyamatok adatait, folyamatok erőforrás igényét automatikusan frissül −
top
space: manuális frissítés
folyamatosan fut q: kilép, M: memóriahasználat szerint rendez, P: cpu használat szerint rendez
PS
Futó folyamatok lekérdezése 2 −
ps parancs
ps aux : ez adja a legrészletesebb eredményt csak egyszer fut le (szemben a toppal)
FELADAT
Készítsen olyan shell scriptet, ami parancssorban kap egy nevet, és kiírja a hozzá tartozó folyamat adatait.
MEGOLDÁS
#!/bin/bash ps ax | grep „$1”
FELADAT
Az előző feladat triviális megoldása nem jó, mert kiírja a kereső program adatait is. Egészítse ki, hogy csak a keresett folyamat adatait lássuk.
MEGOLDÁS
#!/bin/bash ps ax | grep "$1" | grep -v "grep $1" | grep -v "$0"
KILL
a kill paranccsal lehet egy folyamat futását megállítani kill [PID] − − −
„terminate gracefully” - felkéri, hogy álljon le ha ellenkedik: -9 - „die you gravy-sucking pig” kill -9 [PID]
TOVÁBBI KILL OPCIÓK
kill -STOP kill -CONT kill -TERM folyamatot kill -HUP folyamatot
: megállítja a futás : folytatja a futást : megpróbálja lelőni a : lelövi, majd újraindítja a
KILLALL
Név szerinti gyilkolást tesz lehetővé
FELADAT
Készítsen olyan programot, ami a névszerint megadott parancsot legyilkolja. (kb mint a killall, de anélkül)
MEGOLDÁS
#!/bin/bash pid=`ps ax | grep $1 | cut -c 1-5` kill „$pid”
FELADAT
Bővítse ki az előző feladatot olyképpen, hogy amennyiben több feladat is van ugyanolyan néven, úgy a rendszer írja ki azokat, és számbillentyűvel lehessen közülük választani.
MEGOLDÁS
IMMUNIS FOLYAMAT LÉTREHOZÁS
nohup parancs: olyan folyamatot indíthatunk, ami immunis lesz a hangup parancsra (kill -HUP)
/PROC
ismétlés: dinamikus fájlrendszer, elemei csak a memóriában léteznek az összes folyamat „vetülése” itt megtalálható PID azonosítja (könyvtárnév) megtalálható többek között: parancs, ami elindította, folyamat aktuális könyvtára, környezeti változói, státusza elemeiről részletesen: http://www.freeos.com/articles/2879/
FOLYAMAT KOMMUNIKÁCIÓ NAMED PIPE
| : csővezeték, az egyik folyamat adatai átadódnak a másik folyamatnak. −
ez az unnamed pipe, ennek a működése automatikus. Ugyanazon shellről, egyszerre kell indítani a két programot.
Named pipe: hasonló csővezeték, de a köztes állomány „létezik” a fájlrendszeren abba írni lehet, illetve onnan olvasni.
ALT+F2-vel váltsunk át egy másik virtuális konzolra, és lépjünk be ott is (grafikus debian esetén nyissunk egy második konzolt). Hozzunk létre egy nevesített csővezetéket! −
Az egyik konzolon olvassunk belőle: −
mkfifo pipe1 cat < pipe1
A másik konzolon pedig írjunk bele: −
ls -l > pipe1
FELADAT
Készítsen egy olyan programot, ami meghív egy másik programot, és szól, ha a meghívott program végzett. A meghívott program sokáig fusson (itt most tartalma: sleep 10)
MEGOLDÁS 1: SOROS FUTÁS
Kliens: #!/bin/bash echo "Indul a gorog aludni" sleep "$1" echo "Felebredt"
MEGOLDÁS 1: SOROS FUTÁS
Szerver #!/bin/bash ./program1 "15" echo "Keszen allunk"
MEGOLDÁS 2: CSŐVEZETÉKKEL
Kliens:
Ahol $2 egy named pipe
MEGOLDÁS 2: CSŐVEZETÉKKEL
Szerver:
NAMED PIPE TOVÁBBI HASZNA
röptömörítés : mkfifo pipe gzip -9 -c < pipe > out
És valahonnan máshonnan: cat file > pipe De használható zene cd írásra, nyomtatásra stb.
FELADAT
Készítsen két programot. Az egyik olvassa be egy könyvtár tartalmát, és az elemeket adja át egyenként named pipeon keresztül egy másik programnak. A másik program pedig állapítsa meg a file típusát.
MEGOLDÁS - „KLIENS”
MEGOLDÁS - „SZERVER”