I det er forelder for alle Linux-prosesser. Det er den første prosessen å starte når en datamaskin støtter opp, og den går til systemet slår seg av. Det er forfedre for alle andre prosesser.
Hovedrollen er å skape prosesser fra et skript som er lagret i filen / etc / inittab. Denne filen lagrer vanligvis oppføringer som forårsaker Init å gyte gettys på hver linje som brukere kan logge inn. Det styrer også autonome prosesser som kreves av et bestemt system.
køyrenivå
EN runlevel er en programvarekonfigurasjon av systemet som tillater bare en valgt gruppe prosesser som skal utføres. Prosessene som ble opprettet av Init for hver av disse runlevelene, er definert i filen / etc / inittab. Init kan være i en av åtte runder: 0 til 6 og S eller s. Runlevel er endret ved å ha en privilegert bruker kjøre Telinit, som sender passende signaler til Init, forteller det hvilket runlevel å bytte til.
Runlevels 0, 1 og 6 er reservert. Runlevel 0 brukes til å stoppe systemet, runlevel 6 brukes til å starte systemet på nytt, og runlevel 1 brukes til å få systemet til enkeltbrukermodus. Runlevel S er ikke ment å brukes direkte, men i stedet av skriptene som utføres når de går inn i runlevel 1.
Runlevels 7 til 9 er også gyldige, men ikke godt dokumentert fordi "tradisjonelle" Unix-varianter ikke bruker dem. Runlevels S og s er de samme. Internt er de aliaser for samme runlevel.
oppstart
Etter at Init er påkalt som det siste trinnet i kjernestartssekvensen, ser det etter filen / etc / inittab for å se om det er en oppføring av typen initdefault . Initdefault-oppføringen bestemmer systemets innledende runlevel. Hvis det ikke er noen slik oppføring (eller ingen / etc / inittab i det hele tatt), må en runlevel angis på systemkonsollen.
Runlevel S eller s tar systemet til enkeltbrukermodus og krever ikke en / etc / inittab-fil. I enkeltbrukermodus åpnes et rotskall på / dev / konsoll.
Når du går inn i enkeltbrukermodus, leser init konsollens ioctl-stater fra /etc/ioctl.save. Hvis denne filen ikke eksisterer, init initierer linjen ved 9600 baud og med CLOCAL-innstillinger. Når init forlater single-user-modus, lagrer den konsollens ioctl-innstillinger i denne filen, slik at den kan gjenbrukes for neste enkeltbruker økt.
Når du skriver inn en multiuser-modus for første gang, utfører Init oppstart og oppstartsposter for å tillate filsystemer å montere før brukere kan logge inn. Da blir alle oppføringer som samsvarer med runlevelet behandlet.
Når du starter en ny prosess, kontrollerer Init først om filen / etc / initscript eksisterer. Hvis den gjør det, bruker den dette skriptet til å starte prosessen.
Hver gang et barn avsluttes, registrerer Init faktumet og årsaken til at det døde i / var / run / utmp og / var / log / wtmp, forutsatt at disse filene eksisterer.
Endre Runlevels
Etter at den har spurt alle prosessene som er spesifisert, venter Init på at en av dens etterkommere prosesser dør, et powerfail signal, eller til det signaliseres av Telinit å endre systemets runlevel. Når en av disse tre betingelsene oppstår, undersøkes den / etc / inittab filen. Nye oppføringer kan til enhver tid legges til denne filen. Imidlertid venter init fremdeles for en av de tre ovennevnte betingelsene. For å sørge for en øyeblikkelig respons, kan Telinit Q- eller q-kommandoen våkne opp for å undersøke filen / etc / inittab.
Hvis Init ikke er i enbrukermodus og mottar et powerfail-signal (SIGPWR), leser det filen / etc / powerstatus. Det starter deretter en kommando basert på innholdet i denne filen:
- F (AIL): Strøm er feil, UPS gir strømmen. Kjør powerwait og powerfail oppføringene.
- O (K): Strømmen er gjenopprettet, kjør powerokwait-oppføringene.
- LAV): Strømmen mislykkes, og UPS har lavt batteri. Kjør powerfailnow oppføringene.
Hvis / etc / powerstatus ikke eksisterer eller inneholder noe annet enn bokstavene F, O eller L, oppfører Init som om den leser bokstaven F.
Bruk av SIGPWR og / etc / powerstatus er motet. Alle som ønsker å samhandle med Init, bør bruke kontrollpanelet / dev / initctl.
Når Init blir bedt om å endre runlevel, sender det advarselssignalet SIGTERM til alle prosesser som ikke er definert i det nye løpebane. Den venter deretter fem sekunder før du tvinges til å avslutte disse prosessene ved hjelp av SIGKILL-signalet. Legg merke til at Init forutsetter at alle disse prosessene og deres etterkommere forblir i samme prosessgruppe som Init opprinnelig opprettet for dem. Hvis noen prosess endrer sin tilknytning til prosessgruppen, mottar den ikke disse signalene. Slike prosesser må avsluttes separat.
telinit
Telinit er koblet til / sbin / init. Det tar et tegn på ett tegn og signaler Init for å utføre den aktuelle handlingen. Følgende argumenter tjener som direktiver til Telinit:
- 0, 1, 2, 3, 4, 5 eller 6: Fortell Init å bytte til angitt kjøre nivå.
- a, b, c: Fortell Init å behandle bare de / etc / inittab filoppføringene som har runlevel a, b eller c.
- Q eller q: Fortell Init å omprøve filen / etc / inittab.
- S eller s: Fortell Init å bytte til single-user modus.
- U eller deg: Fortell init å utføre seg selv (bevare staten). Ingen omprøving av / etc / inittab-fil skjer. Runlevel skal være S, s, 1, 2, 3, 4 eller 5; Ellers blir forespørselen tydelig ignorert.
Telinit kan også fortelle Init hvor lenge det skal vente mellom å sende prosesser SIGTERM og SIGKILL signaler. Standard er fem sekunder, men denne verdien kan endres med -t sek alternativ.
Telinit kan kun påberopes av brukere med passende privilegier.
Init binær sjekker om det er Init eller Telinit ved å se på prosess ID. Den virkelige Inits prosess ID er alltid 1. Fra dette følger at i stedet for å ringe Telinit, kan en person bruke Init som en snarvei.