I det er forælder til alle Linux-processer. Det er den første proces, der starter, når en computer starter op, og den kører, indtil systemet lukker. Det er forfader for alle andre processer.
Dens primære rolle er at skabe processer fra et script gemt i filen / etc / inittab. Denne fil gemmer normalt indgange, der forårsager Init til at gyde gettys på hver linje, som brugere kan logge ind. Det styrer også autonome processer, der kræves af et bestemt system.
køreniveauer
EN runlevel er en softwarekonfiguration af systemet, der kun tillader en udvalgt gruppe af processer, der skal udføres. Processerne, der frembringes af Init for hver af disse runder, er defineret i filen / etc / inittab. Init kan være i en af otte runder: 0 til 6 og S eller s. Runlevel ændres ved at have en privilegeret brugerkørsel Telinit, som sender passende signaler til Init, fortæller det hvilket runlevel at skifte til.
Runlevels 0, 1 og 6 er reserveret. Runlevel 0 bruges til at stoppe systemet, runlevel 6 bruges til at genstarte systemet, og runlevel 1 bruges til at få systemet til single-user mode. Runlevel S er ikke beregnet til at blive brugt direkte, men i stedet af de scripts, der udføres, når de kommer ind i runlevel 1.
Runlevels 7 til 9 er også gyldige, men ikke vel dokumenterede, fordi "traditionelle" Unix-varianter ikke bruger dem. Runlevels S og s er de samme. Internt er de aliaser for samme runlevel.
Opstart
Når Init er påkaldt som det sidste trin i kernel boot-sekvensen, ser det efter filen / etc / inittab for at se om der er en indtastning af typen initdefault . Indtastet initdefault bestemmer systemets oprindelige runlevel. Hvis der ikke er en sådan post (eller nej / etc / inittab overhovedet), skal et runlevel indtastes på systemkonsollen.
Runlevel S eller s tager systemet til single-user mode og kræver ikke en / etc / inittab-fil. I enkeltbrugertilstand åbnes en rotskal på / dev / konsol.
Når du indtaster single-user-tilstand, læser init konsolets ioctl-stater fra /etc/ioctl.save. Hvis denne fil ikke findes, initialiserer init linjen ved 9600 baud og med CLOCAL indstillinger. Når init forlader single-user-tilstand, gemmes det konsolets ioctl-indstillinger i denne fil, så det kan genbruge dem til den næste enkeltbruger session.
Når du indtaster en multiuser-tilstand for første gang, udfører Init boot og bootwait-indgangene for at tillade filsystemer at montere, før brugerne kan logge ind. Derefter behandles alle poster, der matcher runlen.
Når du starter en ny proces, kontrollerer Init først, om filen / etc / initscript eksisterer. Hvis det gør det, bruger det dette script til at starte processen.
Hver gang et barn afslutter registrerer Init faktumet og årsagen til det døde i / var / run / utmp og / var / log / wtmp, forudsat at disse filer eksisterer.
Ændring af runder
Efter at have hentet alle de specificerede processer, venter Init på, at en af dens efterfølgende processer dør, et powerfail signal, eller indtil det signaliseres af Telinit at ændre systemets runde. Når en af disse tre betingelser opstår, undersøges den / etc / inittab filen igen. Nye poster kan til enhver tid tilføjes til denne fil. Imidlertid venter init endnu en af de tre ovennævnte betingelser. For at give et øjeblikkeligt svar, kan kommandoen Telinit Q eller q vågne op. Init for at undersøge filen / etc / inittab igen.
Hvis Init ikke er i single-user mode og modtager et powerfail signal (SIGPWR), læser det filen / etc / powerstatus. Det starter derefter en kommando baseret på indholdet af denne fil:
- SVIGTE): Strømmen fejler, UPS giver strømmen. Udfør powerwait og powerfail indgange.
- OKAY): Strømmen er blevet gendannet, udfør powerokwait-posterne.
- LAV): Strømmen fejler, og UPS'en har et lavt batteri. Udfør powerfailnow-indtastningerne.
Hvis / etc / powerstatus ikke eksisterer eller indeholder noget andet end bogstaverne F, O eller L, opfører Init sig som om det læser brevet F.
Anvendelse af SIGPWR og / etc / powerstatus er modløs. Enhver, der ønsker at interagere med Init, skal bruge / dev / initctl kontrolkanalen.
Når Init bliver bedt om at ændre runlevelet, sender det advarselssignalet SIGTERM til alle processer, der ikke er defineret i det nye runde. Det venter derefter fem sekunder, før man tvinges til at afslutte disse processer ved hjælp af SIGKILL-signalet. Bemærk at Init forudsætter, at alle disse processer og deres efterkommere forbliver i samme procesgruppe, som Init oprindeligt skabte til dem. Hvis en proces ændrer sin procesgruppe tilknytning, modtager den ikke disse signaler. Sådanne processer skal opsiges separat.
Telinit
Telinit er knyttet til / sbin / init. Det tager et tegn på et tegn og signaler Init for at udføre den relevante handling. Følgende argumenter tjener som direktiver til Telinit:
- 0, 1, 2, 3, 4, 5 eller 6: Fortæl Init at skifte til det angivne køreniveau.
- a, b, c: Fortæl Init at kun behandle de / etc / inittab filposter, der har runlevel a, b eller c.
- Q eller q: Fortæl Init at genprøve filen / etc / inittab.
- S eller s: Fortæl Init at skifte til single-user mode.
- U eller u: Fortæl init for at genudføre sig selv (bevare staten). Der foretages ingen omprøvning af / etc / inittab-filen. Runlevel skal være S, s, 1, 2, 3, 4 eller 5; Ellers ignoreres anmodningen tydeligt.
Telinit kan også fortælle Init, hvor længe det skal vente mellem afsendelse af SIGTERM- og SIGKILL-signaler. Standard er fem sekunder, men denne værdi kan ændres med -t sek mulighed.
Telinit kan kun påberåbes af brugere med passende privilegier.
Den init binære kontrollerer, om den er Init eller Telinit ved at se på proces ID. Den rigtige Inits proces ID er altid 1. Heraf følger, at i stedet for at ringe til Telinit, kan en person bruge Init som en genvej.




