Az Init parancs használata Linux alatt

Az Init az összes folyamat szülője. Elsődleges szerepe az / etc / inittab fájlban tárolt parancsfájl létrehozása (lásd inittab (5)). Ez a fájl általában olyan bejegyzéseket tartalmaz, amelyek az egyes sorokban a getty- eket generálják, és a felhasználók be tudnak jelentkezni.

runlevels

A futási szint a rendszer szoftverkonfigurációja, amely csak a kiválasztott folyamatok csoportját teszi lehetővé. Az init által generált folyamatok mindegyik futási szintre az / etc / inittab fájlban kerülnek meghatározásra. Az Init nyolc futási szint közül választhat: 0-6 és S vagy s . A futási szintet úgy módosítja, hogy kiváltságos felhasználó futtatja a telinit-t , amely megfelelő jeleket küld az init-nek , és jelzi, hogy melyik futási szintre kell átállnia.

A 0 , 1 és 6 futási szintek fenntartva vannak. A Runlevel 0 a rendszer leállítására szolgál, a 6-es futási szintet a rendszer újraindítására használják, és az 1. futási szintet használják a rendszer egyetlen felhasználói módba történő lekapcsolásához. A Runlevel S- t nem igazán használják közvetlenül, de többet a scriptek esetében, amelyek a futási szint 1 bevitele során kerülnek végrehajtásra. További információért lásd a shutdown (8) és inittab (5) manpages-et .

A 7-9 futási szintek is érvényesek, bár nem igazán dokumentáltak. Ez azért van, mert a "hagyományos" Unix változatok nem használják őket. Abban az esetben, ha kíváncsi vagy, az S és s futási szintek valójában ugyanazok. Belülről ugyanazon futási szintek aliasok.

indításhoz

Miután az init a rendszermag indítási sorozata utolsó lépéseként fordult elő, a / etc / inittab fájlban megkeresi, hogy van-e initdefault típusú initdefault (lásd inittab (5)) bejegyzést. Az initdefault bejegyzés meghatározza a rendszer kezdeti futási szintjét. Ha nincs ilyen bejegyzés (vagy nincs / etc / inittab egyáltalán), futási szintet kell beírni a rendszer konzolba.

A Runlevel S vagy s a rendszert egyetlen felhasználó módba hozza, és nem igényel egy / etc / inittab fájlt. Egyfelhasználós üzemmódban a / dev / console-ban gyökérhéj nyílik meg.

Egy felhasználói módba való belépéskor az init beolvassa a konzol ioctl (2) állapotát a /etc/ioctl.save fájlból . Ha ez a fájl nem létezik, az init inicializálja a sort 9600 baud és a CLOCAL beállításokkal. Amikor az init elhagyja az egyfelhasználós módot, akkor tárolja a konzol ioctl beállításait ebben a fájlban, így újra felhasználhatja őket a következő egyfelhasználós munkamenet számára.

Többszörös felhasználói módba való belépéskor az init végrehajtja a rendszerindítási és bootwait- bejegyzéseket, amelyek lehetővé teszik a fájlrendszerek telepítését, mielőtt a felhasználók be tudnának jelentkezni, majd a futási szintnek megfelelő bejegyzések feldolgozása megtörténik.

Új folyamat indításakor az init először ellenőrzi, hogy a / etc / initscript létezik-e. Ha igen, akkor ezt a szkriptet használja a folyamat elindításához.

Minden alkalommal, amikor a gyermek megszűnik, az init rögzíti a / var / run / utmp és a / var / log / wtmp fájlok tényét és okait , feltéve, hogy ezek a fájlok léteznek.

Futtatási szintek módosítása

Miután létrehozta az összes megadott eljárást, az init várakozásai szerint az egyik leszármazott folyamata meghal, egy powerfail jel, vagy amíg a telinit jelzi a rendszer futási szintjének megváltoztatását. Ha a fenti három feltétel valamelyike ​​bekövetkezik, újra megvizsgálja az / etc / inittab fájlt. Az új bejegyzések bármikor hozzáadhatók ehhez a fájlhoz. Az init azonban még vár a fenti három feltétel egyikére. A pillanatnyi válasz megadásához a telinit Q vagy q parancs fel tudja ébreszteni az init-et, hogy újra megvizsgálja az / etc / inittab fájlt.

Ha az init nem egyfelhasználós üzemmódban van és Powerfail jelet (SIGPWR) kap, akkor a / etc / powerstatus fájlt olvassa. Ezután elindít egy parancsot a fájl tartalma alapján:

F (AIL)

A tápfeszültség nem működik, az UPS biztosítja a tápellátást. Végezze el a powerwait és powerfail bejegyzéseket.

RENDBEN)

A hatalom helyreállt, végrehajtja a powerokwait bejegyzést.

ALACSONY)

A tápegység nem működik, és az UPS alacsony akkumulátorral rendelkezik. Végezze el a powerfailnow bejegyzést.

Ha az / etc / powerstatus nem létezik vagy bármi mást tartalmaz, akkor az F , O vagy L betű init úgy viselkedik, mintha olvasta volna az F betűt.

A SIGPWR és / etc / powerstatus használata nem kedvezett . Az init- val való interakciót igénylő személynek a / dev / initctl vezérlőcsatornát kell használnia - ebből további információkat találhat a sysvinit csomag forráskódjával kapcsolatban.

Amikor az init- t kérték a futási szint megváltoztatására, akkor a SIGTERM figyelmeztető jelet elküldi az összes olyan folyamatnak, amely nincs meghatározva az új futási szintben. Ezután 5 másodpercig vár, mielőtt ezeket a folyamatokat a SIGKILL jelzéssel végződne. Vegyük észre, hogy az init feltételezi, hogy mindezek a folyamatok (és leszármazottaik) ugyanabban a folyamatcsoportban maradnak, amelyet az eredetileg létrehozott nekik. Ha bármelyik folyamat megváltoztatja a folyamatcsoport-tagságát, akkor ezeket a jeleket nem fogja megkapni. Az ilyen folyamatokat külön kell megszüntetni.

telinit

A / sbin / telinit a / sbin / init kapcsolódik . Egy karakteres argumentumot igényel, és jelzi az init-et, hogy elvégezze a megfelelő műveletet. A következő érvek iránymutatásul szolgálnak a telinit számára :

0 , 1 , 2 , 3 , 4 , 5 vagy 6

mondja be az init-t, hogy váltson a megadott futtatási szintre.

a , b , c

mondja be az init-t, hogy dolgozzon csak azokkal az / etc / inittab fájlbejegyzéseket, amelyek futási szintje a , b vagy c .

Q vagy q

mondja be init, hogy vizsgálja felül az / etc / inittab fájlt.

S vagy s

init-nek, hogy átváltson egy felhasználói módra.

U vagy u

mondja be az init-t, hogy újra végrehajtsa magát (az állam megőrzése). Nem történik újra az / etc / inittab fájl ellenőrzése. A futási szintnek az Ss12345 egyikének kell lennie, különben a kérés csendben figyelmen kívül maradna.

A telinit is elmondhatja, hogy mennyi ideig kell várnia a SIGTERM és a SIGKILL jelek között. Az alapértelmezett érték 5 másodperc, de ez a -t sec opcióval módosítható.

A telinvont csak a megfelelő jogosultságokkal rendelkező felhasználók hívhatják meg.

Az init bináris ellenőrzi, hogy az init vagy a telinit a folyamat azonosítójának tekintve; a valódi init folyamatazonosítója mindig 1 . Ebből következik, hogy a telinit hívás helyett az init helyett inkább parancssort használhatunk.