V je staršev vseh Linux procesov. To je prvi postopek, ki se začne, ko se računalnik zažene in deluje, dokler se sistem ne izklopi. Je prednik vseh drugih procesov.
Njena primarna naloga je ustvariti procese iz skripte, shranjene v datoteki / etc / inittab. Ta datoteka ponavadi shrani vnose, ki povzročijo, da Init sprosti gettys na vsako vrstico, na katero se lahko uporabniki prijavijo. Prav tako nadzoruje avtonomne procese, ki jih zahteva kateri koli določen sistem.
Stopnice
A Runlevel je programska konfiguracija sistema, ki omogoča izvajanje samo izbrane skupine procesov. Postopki, ki jih Init za vsakega od teh podprogramov določa, so definirani v datoteki / etc / inittab. Init je lahko v enem od osmih podprogramov: od 0 do 6 in S ali s. Izvedba se spremeni s tem, da ima privilegiran uporabnik Telinit, ki pošilja ustrezne signale Initu in jim pove, na kateri ravni se spremeni.
Vodiči 0, 1 in 6 so rezervirani. Runlevel 0 se uporablja za zaustavitev sistema, za izvedbo ponovnega zagona sistema uporabite nivo izvajanja 6, za izvajanje sistema pa v enoposteljni način. Runlevel S ni namenjen neposredni uporabi, temveč skripti, ki se izvedejo ob vstopu v izvedenko 1.
Upravljalni programi od 7 do 9 so prav tako veljavni, čeprav niso dobro dokumentirani, ker jih "tradicionalne" različice Unixa ne uporabljajo. Izvedbe S in s so enake. Notri so vzdevki za isto stopnjo.
Zagon
Potem ko je Init pozvan kot zadnji korak zaporedja zagonskega jedra, išče datoteko / etc / inittab in preveri, če je vnos tipa initdefault . Vnos initdefault določa začetno stopnjo delovanja sistema. Če takega vnosa ni (ali sploh ni / etc / inittab), je treba na sistemski konzoli vnesti nivo izvajanja.
Runlevel S ali s vzame sistem v enopostopni način in ne zahteva datoteke / etc / inittab. V načinu z enim uporabnikom se na konzoli / dev / konzoli odpre korenska lupina.
Pri vnosu enopostopnega načina, init prebere stanje ioctl konzole iz /etc/ioctl.save. Če ta datoteka ne obstaja, init inicializira črto na 9600 baud in nastavitvah CLOCAL. Ko init zapusti enopostopni način, v tej datoteki shrani nastavitve ioctl konzole, da jih lahko znova uporabi za naslednjo sejo ene uporabnike.
Ko prvič vnesete večuporabniški način, Init opravi vnose za zagon in zagon bootwait, da omogoči namestitev datotečnih sistemov, preden se lahko uporabniki prijavijo. Nato se obdelajo vsi vnosi, ki ustrezajo ravni izvajanja.
Pri zagonu novega postopka, Init najprej preveri, ali obstaja datoteka / etc / initscript. Če to naredi, to skripto uporabi za začetek postopka.
Vsakič, ko otrok konča, Init zapiše dejstvo in razlog, zakaj je umrl v / var / run / utmp in / var / log / wtmp, če te datoteke obstajajo.
Spreminjanje nivojev delovanja
Po tem, ko sproži vse navedene postopke, Init čaka, da eden od njenih potomskih procesov umre, signala moči, ali dokler Telinit ne signalizira, da bi spremenil delovno stopnjo sistema. Ko se zgodi eden od teh treh pogojev, ponovno pregleda datoteko / etc / inittab. V to datoteko lahko kadarkoli dodate nove vnose. Vendar pa init še vedno čaka na enega od zgornjih treh pogojev. Da bi zagotovili takojšen odziv, lahko ukaz Telinit Q ali q prebudi Init, da ponovno pregleda datoteko / etc / inittab.
Če Init ni v enoposteljnem načinu in sprejema signale moči (SIGPWR), bere datoteko / etc / powerstatus. Nato začne ukaz, ki temelji na vsebini te datoteke:
- F (AIL): Napajanje ne deluje, UPS zagotavlja moč. Izvedite vpisi za vklop in vklop.
- V REDU): Napajanje je bilo obnovljeno, izvedite vnose PowerOut.
- L (OW): Napajanje ne deluje in UPS ima nizko baterijo. Izvedite vnose powerfailnow.
Če / etc / powerstatus ne obstaja ali vsebuje kaj drugega kot črk F, O ali L, se Init obnaša kot če prebere črko F.
Uporaba SIGPWR in / etc / powerstatus je odvrača. Vsakdo, ki želi interakcijo z Init, bi moral uporabljati / dev / initctl nadzorni kanal.
Ko zahteva Init, da spremeni izvedbeni nivo, pošlje opozorilni signal SIGTERM vsem procesom, ki v novem nivoju niso definirani. Nato čaka pet sekund, preden jih prisilno zaključi z uporabo signala SIGKILL. Upoštevajte, da Init predpostavlja, da vsi ti procesi in njihovi potomci ostanejo v isti procesni skupini, ki jo je Init prvotno ustvaril zanje. Če kateri koli proces spremeni svojo pripadnost procesni skupini, ne prejme teh signalov. Takšne procese je treba zaključiti ločeno.
Telinit
Telinit je povezan s / sbin / init. Zahteva enopredmetni argument in signalizira Init, da izvede ustrezno dejanje. Naslednji argumenti služijo kot smernice za Telinit:
- 0, 1, 2, 3, 4, 5 ali 6: Povejte Initu, da preklopite na določeno raven.
- a, b, c: Povejte Initu, da obdela le tiste datoteke / etc / inittab, ki imajo lastnosti a, b ali c.
- Q ali q: Povejte Initju, da ponovno preuči datoteko / etc / inittab.
- S ali s: Povejte Init, da preklopite na enopostopni način.
- U ali u: Povejte init, da se ponovno izvrši (ohranitev države). Ne pride do ponovnega pregleda datoteke / etc / inittab. Izkoristek mora biti S, s, 1, 2, 3, 4 ali 5; v nasprotnem primeru je zahteva tiho prezrta.
Telinit lahko tudi Initu pove, kako dolgo naj počaka med pošiljanjem procesov, ki jih signalizira SIGTERM in SIGKILL. Privzeta vrednost je pet sekund, vendar se ta vrednost lahko spremeni z -t sekunde možnost.
Telinit lahko kličejo samo uporabniki z ustreznimi privilegiji.
Binarni pregledi Init, če je Init ali Telinit, si ogledajo njegovo identifikacijsko številko procesa. Inicialov procesni ID je vedno 1. Iz tega sledi, da namesto Telinita lahko oseba uporabi Init kot bližnjico.