Hoe om die Init Command in Linux te gebruik

Init is die ouer van alle prosesse. Sy primêre rol is om prosesse te skep van 'n script wat in die lêer gestoor is / etc / inittab (sien inittab (5)). Hierdie lêer het gewoonlik inskrywings wat veroorsaak dat init getty s op elke lyn wat gebruikers kan aanmeld, beheer. Dit beheer ook outonome prosesse wat deur enige spesifieke stelsel benodig word.

hardloop vlakke

'N Runlevel is 'n sagtewarekonfigurasie van die stelsel wat slegs toelaat dat 'n geselekteerde groep prosesse bestaan. Die prosesse wat deur init vir elkeen van hierdie renne ontwikkel word, word in die / etc / inittab lêer gedefinieer. Init kan in een van agt renvlakke wees: 0-6 en S of s . Die runlevel word verander deur 'n bevoorregte gebruikersloper telinit te hê , wat gepaste seine na init stuur , wat vertel watter lopende vlak om te verander.

Runlevels 0 , 1 en 6 is gereserveer. Runlevel 0 word gebruik om die stelsel te stop. Runlevel 6 word gebruik om die stelsel te herlaai. Rondevlak 1 word gebruik om die stelsel in die enkele gebruiker modus af te laai. Runlevel S is nie regtig bedoel om direk gebruik te word nie, maar meer vir die skrifte wat uitgevoer word wanneer jy die Runlevel 1 aangaan. Vir meer inligting hieroor, sien die manpages vir afsluitings (8) en inittab (5).

Runlevels 7-9 is ook geldig, maar nie regtig gedokumenteer nie. Dit is omdat "tradisionele" Unix-variante hulle nie gebruik nie. As jy nuuskierig is, is runeveltjies S en s eintlik dieselfde. Intern is hulle alias vir dieselfde renvlak.

boot

Nadat init aangewys is as die laaste stap van die kern- opstartvolgorde , soek dit na die lêer / etc / inittab om te sien of daar 'n inskrywing is van die tipe initdefault (sien inittab (5)). Die initdefault- inskrywing bepaal die aanvanklike renvlak van die stelsel. As daar nie so 'n inskrywing is nie (of nee / ens / initab glad nie), moet 'n runlevel by die stelselkonsole ingevoer word.

Runlevel S of s bring die stelsel na enkele gebruiker modus en benodig nie 'n / etc / inittab lêer nie. In enkelgebruikermodus word 'n wortelskulp oopgemaak op / dev / konsole .

By die invoer van een gebruiker modus, lees init die konsole se ioctl (2) state van /etc/ioctl.save . As hierdie lêer nie bestaan ​​nie, initialiseer init die lyn by 9600 baud en met CLOCAL instellings. Wanneer init die eenmalige modus verlaat, slaan dit die konsole se ioctl- instellings in hierdie lêer op, sodat dit weer vir die volgende enkelgebruikersessie gebruik kan word.

Wanneer die eerste keer 'n veelgebruikermodus ingevoer word, voer init die opstart- en bootwait- inskrywings in sodat lêerstelsels gemonteer kan word voordat gebruikers kan aanmeld. Alle inskrywings wat ooreenstem met die renvlak word dan verwerk.

By die begin van 'n nuwe proses kontroleer init eers of die lêer / etc / initscript bestaan. As dit wel gebeur, gebruik dit hierdie skrip om die proses te begin.

Elke keer as 'n kind beëindig word, word die feit en die rede waarom dit dood is in / var / run / utmp en / var / log / wtmp opgeneem , mits hierdie lêers bestaan.

Veranderende Runlevels

Nadat dit al die prosesse gespesifiseer het, wag init vir een van sy afstammelinge om te sterf, 'n powerfail-sein, of totdat dit deur die telinit aangedui word om die stelsel se renvlak te verander. Wanneer een van die bogenoemde drie toestande plaasvind, word die / etc / inittab- lêer weer ondersoek. Nuwe inskrywings kan enige tyd by hierdie lêer gevoeg word. Maar, wag wag nog steeds op een van die bogenoemde drie toestande. Om voorsiening te maak vir 'n oombliklike reaksie, kan die telinit Q of q opdrag wakker word om die / etc / inittab- lêer weer te ondersoek.

As init nie in 'n enkele gebruiker af is nie en 'n powerfail-sein (SIGPWR) ontvang, lees dit die lêer / etc / powerstatus . Dit begin dan 'n opdrag wat gebaseer is op die inhoud van hierdie lêer:

F (AIL)

Krag misluk, UPS voorsien die krag. Voer die powerwait en powerfail inskrywings uit.

O (K)

Die krag is herstel, voer die powerokwait inskrywings uit.

L (OW)

Die krag is gebrekkig en die UPS het 'n lae battery. Voer die powerfailnow inskrywings uit.

As / etc / powerstatus bestaan ​​nie of bevat iets anders dan sal die letters F , O of L , init optree asof dit die letter F gelees het.

Gebruik van SIGPWR en / etc / powerstatus word ontmoedig. Iemand wat met init wil wil kommunikeer, moet die / dev / initctl beheerskanaal gebruik - sien die bronkode van die sysvinit- pakket vir meer dokumentasie hieroor.

Wanneer init aangevra word om die renvlak te verander, stuur dit die waarskuwingssignaal SIGTERM na alle prosesse wat onbeperk is in die nuwe renvlak. Dit wag dan 5 sekondes voordat die prosesse met behulp van die SIGKILL sein gedwing word. Let daarop dat init aanvaar dat al hierdie prosesse (en hulle afstammelinge) in dieselfde prosesgroep bly, wat oorspronklik vir hulle geskep is. As enige proses sy prosesgroep affiliasie verander, sal dit nie hierdie seine ontvang nie. Sulke prosesse moet afsonderlik beëindig word.

telinit

/ sbin / telinit is gekoppel aan / sbin / init . Dit neem 'n eenkarakter-argument en noem init om die toepaslike aksie uit te voer. Die volgende argumente dien as riglyne vir telinit :

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

vertel init om oor te skakel na die gespesifiseerde hardloopvlak.

a , b , c

Vertel init om slegs die / etc / inittab-lêerinskrywings te verwerk wat ' n , b of c het .

Q of q

vertel init om die / etc / inittab lêer weer te ondersoek.

S of s

Vertel init om oor te skakel na die enkele gebruiker modus.

U of u

vertel init om homself weer uit te voer (die staat te behou). Geen herondersoek van / etc / inittab lêer gebeur nie. Beginvlak moet een van Ss12345 wees , anders sal die versoek stilweg geïgnoreer word.

Telinit kan ook sê hoe lank dit moet wag om die SIGTERM- en SIGKILL-seine te verwerk. Die verstek is 5 sekondes, maar dit kan met die -t sek opsie verander word.

Telinit kan slegs aangewend word deur gebruikers met toepaslike voorregte.

Die init binêre kontroleer of dit init of telinit is deur na sy proses id te kyk ; die werklike init se proses ID is altyd 1 . Hieruit volg dat in plaas daarvan om telinit te bel, kan mens net in plaas daarvan gebruik as 'n kortpad.