OPERÁCIÓS RENDSZEREK II GYAKORLAT 4. óra: Folyamatok Windisch Gergely windisch.gergely@nik.uni-obuda.hu 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 rm -R /* & - minden elvész, de közben dolgozhatunk legalább Ha egy folyamat az előtérben fut, akkor azt a ctrl+z billentyűkombinációval lehet lestoppolni. Újraindítás 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: top Látni lehet: memória használatot, processzor használatot, folyamatok adatait, folyamatok erőforrás igényét automatikusan frissül 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 : megállítja a futás kill -CONT : folytatja a futást kill -TERM : megpróbálja lelőni a folyamatot kill -HUP : lelövi, majd újraindítja a folyamatot
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! mkfifo pipe1 Az egyik konzolon olvassunk belőle: 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