In het is de ouder van alle Linux-processen. Het is het eerste proces dat start wanneer een computer opstart en het draait totdat het systeem wordt afgesloten. Het is de voorouder van alle andere processen.
Zijn primaire rol is om processen te creëren van een script dat is opgeslagen in het bestand / etc / inittab. In dit bestand worden doorgaans vermeldingen opgeslagen die ertoe leiden dat Init gettys spawnen op elke regel die gebruikers kunnen aanmelden. Het beheert ook autonome processen die door een bepaald systeem zijn vereist.
runlevels
EEN runlevel is een softwareconfiguratie van het systeem waarmee alleen een geselecteerde groep processen kan worden uitgevoerd. De processen die door Init worden voortgebracht voor elk van deze runlevels worden gedefinieerd in het bestand / etc / inittab. Init kan in een van de acht runlevels zijn: 0 tot 6 en S of s. Het runlevel wordt gewijzigd door een geprivilegieerde gebruiker Telinit te laten gebruiken, die passende signalen naar Init verzendt en vertelt op welk runlevel dit moet worden gewijzigd.
Runlevels 0, 1 en 6 zijn gereserveerd. Runlevel 0 wordt gebruikt om het systeem te stoppen, runlevel 6 wordt gebruikt om het systeem opnieuw op te starten en runlevel 1 wordt gebruikt om het systeem in de modus voor één gebruiker te krijgen. Runlevel S is niet bedoeld om direct te worden gebruikt, maar in plaats daarvan door de scripts die worden uitgevoerd bij het invoeren van runlevel 1.
Runlevels 7 tot 9 zijn ook geldig, hoewel niet goed gedocumenteerd omdat "traditionele" Unix-varianten deze niet gebruiken. Runlevels S en s zijn hetzelfde. Intern zijn ze aliassen voor hetzelfde runlevel.
Booten
Nadat Init is aangeroepen als de laatste stap van de opstartvolgorde van de kernel, zoekt het naar het bestand / etc / inittab om te zien of er een invoer van het type is initdefault . Het initdefault-item bepaalt het initiële runlevel van het systeem. Als er geen dergelijke invoer is (of helemaal geen / etc / inittab), moet een runlevel worden ingevoerd op de systeemconsole.
Runlevel S of s brengt het systeem naar de modus voor één gebruiker en vereist geen / etc / inittab-bestand. In de modus voor één gebruiker wordt een rootshell geopend op / dev / console.
Bij het invoeren van de modus voor één gebruiker, leest init de ioctl-status van de console uit /etc/ioctl.save. Als dit bestand niet bestaat, initialiseert initial de regel op 9600 baud en met CLOCAL-instellingen. Wanneer init de modus voor één gebruiker verlaat, worden de ioctl-instellingen van de console in dit bestand opgeslagen, zodat deze opnieuw kunnen worden gebruikt voor de volgende sessie voor één gebruiker.
Bij het voor de eerste keer invoeren van een modus met meerdere gebruikers voert Init de boot- en bootwait-items uit die bestandssystemen kunnen koppelen voordat gebruikers zich kunnen aanmelden. Vervolgens worden alle items die overeenkomen met het runlevel verwerkt.
Bij het starten van een nieuw proces controleert Init eerst of het bestand / etc / initscript bestaat. Als dat het geval is, wordt dit script gebruikt om het proces te starten.
Elke keer dat een kind wordt beëindigd, neemt Init het feit en de reden dat het stierf op in / var / run / utmp en / var / log / wtmp, op voorwaarde dat deze bestanden bestaan.
Runlevels veranderen
Nadat het alle gespecificeerde processen heeft uitgelokt, wacht Init of een van zijn afstammelingen afsterft, een powerfail-signaal of totdat het wordt gesignaleerd door Telinit om het runlevel van het systeem te wijzigen. Wanneer een van deze drie voorwaarden optreedt, wordt het bestand / etc / inittab opnieuw onderzocht. Op elk moment kunnen nieuwe items aan dit bestand worden toegevoegd. Init wacht echter nog steeds op het optreden van een van de bovenstaande drie voorwaarden. Om te zorgen voor een onmiddellijk antwoord, kan de opdracht Telinit Q of q Init wekken om het bestand / etc / inittab opnieuw te bekijken.
Als Init zich niet in de modus voor één gebruiker bevindt en een powerfail-signaal (SIGPWR) ontvangt, wordt het bestand / etc / powerstatus gelezen. Vervolgens start het een opdracht op basis van de inhoud van dit bestand:
- F (AIL): Stroom valt weg, UPS levert stroom. Voer de powerwait- en powerfail-entries uit.
- OK): De stroom is hersteld, voer de powerokwait-ingangen uit.
- LAAG): De stroom valt uit en de UPS heeft een bijna lege batterij. Voer de powerfailnow-vermeldingen uit.
Als / etc / powerstatus niet bestaat of iets anders bevat dan de letters F, O of L, gedraagt Init zich alsof het de letter F leest.
Het gebruik van SIGPWR en / etc / powerstatus wordt afgeraden. Iedereen die wil communiceren met Init moet het / dev / initctl-besturingskanaal gebruiken.
Wanneer Init wordt gevraagd om het runlevel te wijzigen, stuurt het het waarschuwingssignaal SIGTERM naar alle processen die niet gedefinieerd zijn in het nieuwe runlevel. Vervolgens wacht het vijf seconden voordat deze processen geforceerd worden beëindigd met behulp van het SIGKILL-signaal. Merk op dat Init ervan uitgaat dat al deze processen en hun nakomelingen in dezelfde procesgroep blijven die Init oorspronkelijk voor hen heeft gemaakt. Als een proces de aansluiting bij de procesgroep verandert, ontvangt het deze signalen niet. Dergelijke processen moeten afzonderlijk worden beëindigd.
telinit
Telinit is gekoppeld aan / sbin / init. Er is een argument van één teken voor nodig en signaleert Init om de juiste actie uit te voeren. De volgende argumenten dienen als richtlijnen voor Telinit:
- 0, 1, 2, 3, 4, 5 of 6: Vertel Init om naar het opgegeven runniveau te schakelen.
- a, b, c: Vertel Init om alleen die / etc / inittab-bestandsvermeldingen te verwerken die runlevel a, b of c hebben.
- Q of q: Vertel Init om het bestand / etc / inittab opnieuw te bekijken.
- S of s: Vertel Init om over te schakelen naar de modus voor één gebruiker.
- U of u: Vertel init om zichzelf opnieuw uit te voeren (behoud van de staat). Er vindt geen heronderzoek plaats van het bestand / etc / inittab. Runlevel moet S, s, 1, 2, 3, 4 of 5 zijn; anders wordt het verzoek stilzwijgend genegeerd.
Telinit kan ook aan Init vertellen hoelang het zou moeten wachten tussen het verzenden van de SIGTERM- en SIGKILL-signalen. De standaardinstelling is vijf seconden, maar deze waarde kan worden gewijzigd met de -t sec keuze.
Telinit kan alleen worden opgeroepen door gebruikers met de juiste rechten.
De Init binary controleert of het Init is of Telinit door naar de proces-ID te kijken. De proces-ID van de echte Init is altijd 1. Hieruit volgt dat in plaats van Telinit te gebruiken, een persoon Init als een snelkoppeling kan gebruiken.




