Skip to main content

A Linux Command Init megértése

Init = SysVinit (Június 2026)

Init = SysVinit (Június 2026)
Anonim

Benne az összes Linux-folyamat szülője. Ez az első folyamat, amikor a számítógép felindul, és a rendszer leáll. Ez az összes többi folyamat őse.

Elsődleges szerepe az / etc / inittab fájlban tárolt parancsfájlok létrehozása. Ez a fájl általában olyan bejegyzéseket tárol, amelyek az Init-t arra késztetik, hogy minden egyes sorban a felhasználókat be tudja jelenteni a gettys-eket. Ezenkívül az adott rendszer által igényelt autonóm folyamatokat is vezérli.

runlevels

A futási egy olyan szoftverkonfiguráció, 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-tól 6-ig és S vagy s-ig. A futási szintet úgy módosítja, hogy kiváltságos felhasználó futtatja a Telinvit, amely megfelelő jeleket küld az Initnek, és megmondja, 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 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ó módba való bejuttatására. A Runlevel S-t nem közvetlenül használják, hanem a szkriptek, amelyeket az 1-es futási szint beírásakor hajtanak végre.

A 7-től 9-ig terjedő futási szintek is érvényesek, bár nem jól dokumentáltak, mert a "hagyományos" Unix változatok nem használják őket. A S és S futási szint ugyanaz. Belülről ugyanazon futási szintek aliasok.

indításhoz

Miután az Init a rendszermag indítási szekvencia utolsó lépéseként fordult elő, a / etc / inittab fájlban megkeresi a (z) / etc / inittab fájl típusát initdefault . 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.

Runlevel S vagy s a rendszer egyfelhasználós módba kerül, és nem igényel egy / etc / inittab fájlt. Egyfelhasználós módban a / dev / console-ban root-shell nyílik meg.

Egyéni felhasználói módba való belépéskor az init a /etc/ioctl.save-ból olvassa el a konzol ioctl állapotát. 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.

Amikor első alkalommal lép be egy többfelhasználós üzemmódba, az Init elvégzi 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 bejelentkezhetnek. Ezután 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 létezik-e a / etc / initscript fájl. 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ájlban lévő tényt és okait, feltéve, hogy ezek a fájlok léteznek.

Futtatási szintek módosítása

Miután elindította 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, hogy megváltoztatja a rendszer futási szintjét. Ha e 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-t, hogy újra megvizsgálja az / etc / inittab fájlt.

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

  • F (AIL): A tápellátás nem működik, az UPS biztosítja a teljesítményt. 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 nem tartalmaz semmit, mint az F, O vagy L betűket, az Init úgy viselkedik, mintha olvasta volna az F. betűt.

A SIGPWR és / etc / powerstatus használata nem kedvezett. Bárki, aki interakciót szeretne az Initel, használnia kell a / dev / initctl vezérlőcsatornát.

Amikor az Init a futási szint megváltoztatására kéri, a SIGTERM figyelmeztető jelet elküldi az összes olyan folyamatnak, amely az új futási szintben nincs meghatározva. Ezután öt másodpercet vár, mielőtt a SIGKILL jelet erőszakkal lezárja. Megjegyezzük, hogy az Init feltételezi, hogy mindezek a folyamatok és leszármazottaik ugyanabban a folyamatcsoportban maradnak, amelyet az Init eredetileg létrehozott nekik. Ha bármely folyamat megváltoztatja folyamatcsoport-tagságát, akkor nem kapja meg ezeket a jeleket. Az ilyen folyamatokat külön kell megszüntetni.

telinit

A Telinit a / sbin / init-hez kapcsolódik. Egy karakteres argumentumot igényel, és jelzi az Init-t, hogy végezze el 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 meg az Init-nek, hogy váltson a megadott futtatási szintre.
  • a, b, c: Mondja meg az Init-nek, hogy dolgozzon csak azokat az / etc / inittab fájl bejegyzéseket, amelyek futási szintje a, b vagy c.
  • Q vagy q: Mondja meg az Init-nek, hogy vizsgálja felül az / etc / inittab fájlt.
  • S vagy s: Mondja meg az Init-et, hogy váltson egyfelhasználós módba.
  • U vagy u: Mondja meg az init-nek, 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 szint S, s, 1, 2, 3, 4 vagy 5; ellenkező esetben a kérelmet néma figyelmen kívül hagyja.

A Telinit is elmondhatja az Initnek, hogy mennyi ideig kell várnia a SIGTERM és a SIGKILL jelek között. Az alapértelmezett érték öt másodperc, de ez az érték módosítható a -t sec választási lehetőség.

A Telinvit csak a megfelelő jogosultságokkal rendelkező felhasználók használhatják fel.

Az Init bináris ellenőrzi, hogy az Init vagy a Telinit a folyamatazonosítójára tekint. Az igazi Init folyamatazonosítója mindig 1. Ebből következik, hogy ahelyett, hogy Telinint hívnának, egy személy használhatja az Init parancsikont.