NÉV
init, telinit − processz vezérlés inicializálása
ÁTTEKINTÉS
/sbin/init
[ 0123456Ss ]
/sbin/telinit [ −t sec ] [
0123456sSQqabcUu ]
LEÍRÁS
Init
Az init minden processz szülője. Az
elsődleges szerepe, hogy processzeket hozzon
létre egy szkript alapján, amely a
/etc/inittab fájlban található
(lásd inittab(5)). Ebben a fájlban
találhatók azok a bejegyzések amelyek
hatására az init létrehoz
gettyket minden vonalon, amin a
felhasználók be tudnak lépni. E mellett
ellenőriz autonóm processzeket, amelyekre
bármely adott rendszernek szüksége
van.
FUTÁSI SZINTEK
A
futási szint egy szoftver
konfiguráció, amely csak egy
meghatározott processz csoport
létezését engedi meg. Az, hogy az
init milyen processzeket hozzon létre egy
adott futási szinten a /etc/inittab
fájlban van definiálva. Az init nyolc
futási szinten lehet: 0–6 és
S vagy s. Futási szintet úgy
válthatunk, ha egy privilegizált
felhasználó futtatja a
telinit programot , amely elküldi a megfelelő
jeleket az init−nek, amiből ez
utóbbi megtudja melyik futási szintre kell
átváltania.
A 0, 1 és 6 futási szintek foglaltak. 0−ás futási szintre váltással tudjuk leállítani a rendszert, 6−os futási szintre váltással tudjuk leállítani, és 1−es futási szinttel leviszzük "single user mode"−ba vagyis egy felhasználó használhatja csak. Az S futási szintet nem igazán direkt használatra tervezték, sokkal inkább azoknak a szkripteknek amik a 1−es futási szintre való belépéskor futnak le. További információért lásd a shutdown(8) és inittab(5) kézikönyv oldlakat.
A 7-9 futási szintek is értelmesek, de nincsenek igazán dokumentálva. Ez azért van, mert a "tradicionális" UNIX változatok nem használták őket. Ha kiváncsi vagy, az S és s futási szintek igazából megegyeznek. Belső aliaszokról van szó, amik ugyanarra a futási szintre mutatnak.
BOOTOLÁS
Miután az init meghívódik, a kernel boot szekvencia utolsó lépéseként, megnézi a /etc/inittab fájlt, hogy van-e benne initdefault típusú bejegyzés (lásd inittab(5)). Az initdefault bejegyzés határozza meg a renszer alapértelmezett futási szintjét. Ha nincs ilyen bejegyzés (vagy abszolut nincs /etc/inittab fájl), a futási szintet a konzolon kell megadni.
Az S és s futási szintek "single user mode"−ba állítják a rendszert, ilyenkor nem kell /etc/initttab fájl. "Single user mode"−ban az op. renszer a /sbin/sulogin−t hívja meg a /dev/console−on.
"Single user mode"−ba való belépéskor az init leolvassa a konzol ioctl(2) állapotát a /etc/ioctl.save fájlból. Ha nincs ilyen fájl, az init inicializálja a vonalat 9600 baud−al és CLOCAL beállításokkal. Amikor az init elhagyja a "single user mode"−ot, eltárolja a konzol ioctl beállításait a már említett fájlba, így ezek újrahasználhatók a leközelebbi alkalommal.
Amikor először lépünk "multi-user mode"−ba (több felhasználós módba), az init végrehajtja a boot és a bootwait bejegyzéseket. Ez megengedi, hogy az operációs rendszer felcsatlakoztassa (mount−olja) a fájlrendszereket, mielőtt a felhasználók bejelenkeznének. Ezek után a futási szintnek megfelelő bejegyzések kerülnek végrehajtásra.
Amikor új processzt indít, az init megnézi, hogy létezik−e a /etc/initscript fájl. Ha igen, ezt a szkriptet használja a processz indításához.
Mindig amikor egy gyermek processz véget ér, az init rögzíti ezt a tényt és a halál okát a /var/run/utmp és /var/log/wtmp fájlokba, ha ezek léteznek.
FUTÁSI SZINT VÁLTÁS
Miután létrehozta az összes megadott processzt, az init várja, hogy valamelyik leszármazott processze meghaljon, hogy elmenjen az áram ("powerfail" jel), vagy hogy a telinit futási szint váltást kérjen. Ha a fent említett három lehetőség közül valamelyik megtörténik, az init újraolvassa a /etc/inittab fájlt. A fájlhoz adhatunk bármikor új bejegyzéseket. Ettől függetlenül az init mindig a fent említett három eset egyikére vár. Ha mi akarjuk előidézni a frissítést, a telinit Q vagy q parancs felébresztheti az initet, hogy az újraolvassa a /etc/inittab fájlt.
Ha az init nem "single user"−ben van, és áramkimaradást jelző jelet kap (SIGPWR), elolvassa a /etc/powerstatus fájlt. Ekkor elindít egy utasítást a már említett fájl tartalma alapján.
F(AIL) |
Az áram kimaradt, UPS (szünetmentes táp) adja az áramot. Lefutnak a powerwait és powerfail bejegyzések. | ||
O(K) |
Az áramszolgáltatás visszaállt. Lefutnak a powerokwait bejegyzések. | ||
L(OW) |
Az áram kimaradt és a szünetmentes akkumulátorai is lemerültek. Lefutnak a powerfailnow bejegyzések. |
Ha a /etc/powestatus nem létezik, vagy a F, O vagy L betűktől eltérő értékeket tartalmaz, az init úgy viselkedik, mintha F betűt olvasott volna.
A SIGPWR és a /etc/powerstatus használata nem javasolt. Ha valaki az init−tel akar "beszélni" inkább a /dev/initctl vezérlő csatornát használja - több dokumentációért lásd a sysvinit csomag forráskódját.
Amikor az init−től futási szint váltást kérünk, ez először egy figyelmeztető SIGTERM jelet küld minden processznek, ami nincs a cél futási szinten definiálva. Ez után vár 5 másodpercet, mielőtt erőszakkal megölné a szóban forgó processzeket a SIGKILL jellel. Megjegyzés: az init feltételezi, hogy az összes szóban forgó processz (és a leszármazottaik is) ugyan abban a processz csoportban maradnak, amit az init eredetileg létrehozott nekik. Ha egy processz megváltoztatja a processz csoportját, a leszármazottai már nem kapják meg az init által küldött jeleket. Ezeket a processzeket külön kell leállítani.
TELINIT
A
/sbin/telinit a /sbin/init−hez van
kapcsolva (linkelve). Egy karakteres argumentumot adhatunk
neki, és ő tobábbítja a
megfelelő jeleket az init felé. A
következő argumentumok irányadóak a
telinit−nek:
0,1,2,3,4,5 vagy
6
megmondja az init−nek, hogy váltson az adott futási szintre.
a,b,c |
megmondja az init−nek, hogy csak azokat a bejegyzéseket hajtsa végre a /etc/inittab fájlból amelyeknek a,b vagy c futási szintjük van. |
Q vagy q
megmondja az init−nek, hogy olvassa újra a /etc/inittab fájlt.
S vagy s
megmondja az init−nek, hogy váltson "single user mode"−ba.
U or u |
megmondja az init−nek, hogy induljon újra (megtartja az állapotát). Nem olvassa újra a /etc/inittab−ot. A futási szint a következők egyike kell legyen: Ss12345. Ettől eltérő esetben a kérést a program csendesen figyelmen kívül hagyja. |
A telinit megmondhatja az init−nek, hogy mennyit várjon a SIGTERM és SIGKILL jelek küldése között. Az alapértelmezett időintervallum 5 másodperc, de megváltoztatható a -t sec opcióval.
A telinit−et csak a megfelelő privilégiummal rendelkező felhasználók hívhatják meg.
Az init binárisan ellenőrzi, hogy az init vagy telinit−e, a processz id vizsgálatával; az igazi init processz id-je mindig 1. Ebből az következik, hogy a telinit helyett meghívhatjuk egyszerűen az init−et.
KÖRNYEZET
Az init beállítja a következő környezeti változókat minden gyermekénél:
PATH |
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin |
INIT_VERSION
A neve magáért beszél. Hasznos, ha meg akarjuk állapítani, hogy egy szkript egyenesen az init−től származik−e.
RUNLEVEL
A rendszer aktuális futási szintje.
PREVLEVEL
Az előző futási szint (futási szint váltás után hasznos).
CONSOLE
A rendszerkonzol. Ez általában a kerneltől öröklődik. Ha mégsincs beállítva, az init alapértelmezésben /dev/console−ra állítja.
OPCIÓK BOOTOLÁSKOR
Bootoláskor
át lehet adni, a boot monitoron keresztül (pl.
LILO), az init−nek néhány
opciót. Az init a következő
kapcsolókat fogadja el:
S, single
"Single user mode" boot. Ebben a módban az init megnézi a /etc/inittab−ot és a bootoláskor futtatandó rc szkriptek végrehajtásra kerülnek a "single user mode"−ba való lépés előtt.
1-5 |
Bootolás után választott futási szint. |
-b, emergency
Egyenesen "single user"−be jön fel ("single user" shell−t indít). Nem futtat semmilyen induláskor egyébként lefutó szkriptet.
INTERFÉSZ
Az init egy fifo−n keresztül fülel a /dev−ben, /dev/initctl−en, itt várja az üzeneteket. Ezt használja a telinit amikor az inittel kommunikál. Az interfész nincs túl jól dokumentálva és fejlesztés alatt áll. Az érdeklődők az initreq.h fájlt tanulmányozhatják az init src/ alkönyvtárában, a forrás tar archívumában.
JELEK (SIGNALS)
Az init a
következő jelekre reagál:
SIGHUP
Az init megnézi, hogy
léteznek−e a /etc/initrunlvl és
/var/log/initrunlvl fájlok. Ha ezek
közül az egyik létezik és egy ASCII
runlevelt tartalmaz, az init bevált ebbe a
runlevelbe.
Ez csak a visszafelé kompatibilitás miatt van
így! . Normális esetben (nem
léteznek a fájlok) az init úgy
viselkedik mint a
telinit q.
SIGUSR1
Erre a jelre az init bezárja, majd újra megnyitja a vezérlő fifoját, /dev/initctl−t. Hasznos bootszkriptek esetében amikor a /dev−et újracsatlakoztatjuk (újramountoljuk).
SIGINT
Normális esetben a kernel akkor küldi ezt a jelet az initnek, ha megnyomjuk a CTRL-ALT-DEL gombokat. Ez aktiválja a ctrlaltdel bejegyzést.
SIGWINCH
A kernel akkor küldi ezt a jelet amikor a KeyboardSignal gombot megnyomjuk. Ez aktiválja a kbrequest bejegyzést.
KOMPATIBILITÁS
Az init kompatíbilis a System V inittel. Szorosan együttműködik a /etc/init.d és a /etc/rc{runlevel}.d könyvtárakban található szkriptekkel. Ha a rendszered ezt a konvenciót használja, kell hogy legyen a /etc/init.d könyvtárban egy README nevű fájl ami leírja, hogy hogy működnek ezek a szkriptek.
FÁJLOK
/etc/inittab
/etc/initscript
/dev/console
/etc/ioctl.save
/var/run/utmp
/var/log/wtmp
/dev/initctl
FIGYELMEZTETÉSEK
Az init feltételezi, hogy a processzek és leszármazottjaik ugyanabban a processz csoportban maradnak, ami eredetileg nekik jött létre. Ha a processzek megváltoztatják a csoportjukat, az init nem tudja megölni őket. A végeredmény lehet két, egy terminál vonalról olvasó processz.
DIAGNOSZTIKA
Ha az init észreveszi, hogy folyamatosan újra létrehoz egy adott bejegyzést több mint 10−szer 2 perc alatt, úgy fogja venni, hogy hiba van a megadott parancssorban. Generál egy hibaüzenetet a konzolra, és nem indítja újra a bejegyzésben szereplő programot 5 percig vagy addig, amíg nem kap egy jelet. Ezzel megelőzhető, hogy az init rendszer erőforrásokat foglaljon le csak azért, mert valaki szintaktikai hibát ejtett a /etc/inittab fájlban, vagy mert a bejegyzésben szereplő programot törölték.
SZERZŐK
Miquel van Smoorenburg (miquels [AT] cistron.nl), eredeti kéziköny oldalat írta Michael Haardt (u31b3hs [AT] pool.de).
ÁSD MÉG
getty(1), login(1), sh(1), who(1), shutdown(8), kill(1), inittab(5), initscript(5), utmp(5)
MAGYAR FORDÍTÁS
Kovács Emese <emese [AT] eik.hu>