Skip to main content

Förstå Linux Command Init

SOLVED: How to Fix 215-DIMM Configuration Error on Computer (Maj 2025)

SOLVED: How to Fix 215-DIMM Configuration Error on Computer (Maj 2025)
Anonim

I det är förälder till alla Linux-processer. Det är den första processen att starta när en dator stöter upp och den går tills systemet stängs av. Det är förfader till alla andra processer.

Dess främsta roll är att skapa processer från ett skript som lagras i filen / etc / inittab. Den här filen lagrar vanligtvis poster som orsakar Init att kasta gettys på varje rad som användare kan logga in. Det styr också autonoma processer som krävs av ett visst system.

runlevels

en runlevel är en programkonfiguration av systemet som endast tillåter en vald grupp av processer att utföra. Processerna som skapas av Init för varje av dessa runder definieras i filen / etc / inittab. Init kan vara i en av åtta runder: 0 till 6 och S eller s. Runlevel ändras genom att ha en privilegierad användar-run Telinit, som skickar lämpliga signaler till Init, berättar vilket vilket körnivå som ska bytas till.

Runlevels 0, 1 och 6 är reserverade. Runlevel 0 används för att stoppa systemet, runlevel 6 används för att starta om systemet, och runlevel 1 används för att få systemet till enanvändarläge. Runlevel S är inte menat att användas direkt men istället av de skript som körs när man går in i runlevel 1.

Runlevels 7 till 9 är också giltiga, men inte väl dokumenterade eftersom "traditionella" Unix-varianter inte använder dem. Runlevels S och s är desamma. Internt är de alias för samma runlevel.

uppstart

När Init är påkallat som det sista steget i kärnstartsekvensen, letar den efter filen / etc / inittab för att se om det finns en post av typen initdefault . Ingången initdefault bestämmer systemets initiala runlevel. Om det inte finns någon sådan inmatning (eller nej / etc / inittab alls) måste ett runlevel anges i systemkonsolen.

Runlevel S eller s tar systemet till enkelanvändarläge och behöver inte en / etc / inittab-fil. I enkelanvändarläge öppnas ett rotskal på / dev / konsol.

När man går in i enanvändarläge läser init konsolens ioctl-tillstånd från /etc/ioctl.save. Om den här filen inte existerar init initierar linjen vid 9600 baud och med CLOCAL-inställningarna. När init lämnar enanvändarläge lagras det konsolens ioctl-inställningar i den här filen så att den kan återanvända dem till nästa enskilda användarsession.

När du går in i ett multiuserläge för första gången utför Init start- och bootwait-poster för att låta filsystem monteras innan användarna kan logga in. Därefter bearbetas alla poster som matchar runlevel.

När en ny process startas, kontrollerar Init först om filen / etc / initscript existerar. Om det gör det använder det här skriptet för att starta processen.

Varje gång ett barn avslutar registrerar Init faktumet och anledningen till att det dog i / var / run / utmp och / var / log / wtmp, förutsatt att dessa filer finns.

Ändra Runlevels

Efter det att alla processer specificeras, väntar Init på att en av dess efterföljande processer dör, en powerfail-signal, eller tills den signaleras av Telinit för att ändra systemets körnivå. När en av dessa tre förutsättningar uppstår, granskas den / etc / inittab filen igen. Nya poster kan när som helst läggas till i den här filen. Init väntar dock fortfarande på att ett av ovanstående tre villkor uppstår. För att ge ett ögonblickligt svar kan kommandot Telinit Q eller q vakna Init för att ompröva filen / etc / inittab.

Om Init inte är i enanvändarläge och får en powerfail-signal (SIGPWR), läser den filen / etc / powerstatus. Det startar sedan ett kommando baserat på innehållet i den här filen:

  • MISSLYCKAS): Strömmen misslyckas, UPS ger strömmen. Exekvera powerwait och powerfail poster.
  • OK): Strömmen har återställts, kör powerokwait-posterna.
  • LÅG): Strömmen misslyckas, och UPS-enheten har ett lågt batteri. Utför powerfailnow-posterna.

Om / etc / powerstatus existerar inte eller innehåller något annat än bokstäverna F, O eller L, uppträder Init som om det läser bokstaven F.

Användning av SIGPWR och / etc / powerstatus är avskräckt. Den som vill interagera med Init ska använda / dev / initctl-kontrollkanalen.

När Init begär att ändra runlevel, skickar den varningssignalen SIGTERM till alla processer som är odefinierade i det nya runveläget. Det väntar sedan fem sekunder innan man tvingas avsluta dessa processer med hjälp av SIGKILL-signalen. Observera att Init förutsätter att alla dessa processer och deras efterkommande förblir i samma processgrupp som Init ursprungligen skapade för dem. Om någon process ändrar sin processgruppsanslutning, får den inte dessa signaler. Sådana processer måste avslutas separat.

telinit

Telinit är länkad till / sbin / init. Det tar ett tecken på ett tecken och signaler Init för att utföra lämplig åtgärd. Följande argument tjänar som direktiv till Telinit:

  • 0, 1, 2, 3, 4, 5 eller 6: Berätta Init att växla till angiven körnivå.
  • a, b, c: Berätta Init att bara bearbeta de / etc / inittab filposter som har runlevel a, b eller c.
  • Q eller q: Berätta Init att ompröva filen / etc / inittab.
  • S eller s: Berätta Init att växla till enkelanvändarläge.
  • Du eller du: Berätta init att återföra sig själv (bevara staten). Ingen omprövning av / etc / inittab-filen händer. Runlevel bör vara S, s, 1, 2, 3, 4 eller 5; Annars ignoreras förfrågan tyst.

Telinit kan också berätta för Init hur länge det ska vänta mellan att skicka processer SIGTERM och SIGKILL signaler. Standardvärdet är fem sekunder, men detta värde kan ändras med -t sek alternativ.

Telinit kan endast åberopas av användare med lämpliga privilegier.

Init binära kontrollerar om det är Init eller Telinit genom att titta på dess process ID. Det verkliga Inits process ID är alltid 1. Från detta följer att istället för att ringa Telinit kan en person använda Init som en genväg.