Skip to main content

Comprèn el Linux Command Init

Anonim

Init és el pare de tots els processos de Linux. És el primer procés que s'inicia quan s'inicia l'ordinador i s'executa fins que el sistema s'apaga. És l'avantpassat de tots els altres processos.

El seu paper principal és crear processos a partir d'un script emmagatzemat en el fitxer / etc / inittab. Normalment, aquest fitxer emmagatzema entrades que provoquen que Init generi gettys en cada línia que els usuaris puguin iniciar sessió. També controla els processos autònoms que requereix un sistema en particular.

Nivells d'execució

A nivell d'execució és una configuració de programari del sistema que permet executar només un grup seleccionat de processos. Els processos generats per Init per a cadascun d'aquests nivells d'execució es defineixen en el fitxer / etc / inittab. Init pot estar en un dels vuit nivells d'execució: de 0 a 6 i de S o s. El nivell d'execució es modifica tenint un usuari privilegiat que executa Telinit, que envia senyals apropiades a Init, indicant-li quin nivell d'execució canviarà.

Els nivells d'execució 0, 1 i 6 estan reservats. El nivell d'execució 0 s'utilitza per aturar el sistema, el nivell d'execució 6 s'utilitza per reiniciar el sistema i el nivell d'execució 1 s'utilitza per aconseguir que el sistema es faci en mode d'usuari únic. El nivell d'execució S no està pensat per ser utilitzat directament, sinó per les seqüències d'ordres que s'executen quan s'introdueix el nivell d'execució 1.

Els nivells d'execució del 7 al 9 també són vàlids, encara que no estan ben documentats perquè les variants tradicionals "Unix" no les utilitzen. Els nivells d'execució S i s són els mateixos. Internament, són alies per al mateix nivell d'execució.

Arrencada

Després d'invocar Init com a últim pas de la seqüència d'arrencada del nucli, busca el fitxer / etc / inittab per veure si hi ha una entrada del tipus Initdefault . L'entrada initdefault determina el nivell d'execució inicial del sistema. Si no hi ha cap entrada d'aquest tipus (o no, / etc / inittab), s'ha d'introduir un nivell d'execució a la consola del sistema.

Runlevel S o s porta el sistema al mode d'usuari únic i no requereix un fitxer / etc / inittab. En mode d'usuari únic, s'obre un intèrpret d'ordres de root a / dev / console.

Quan entra al mode d'usuari únic, init llegeix els estats ioctl de la consola des de /etc/ioctl.save. Si aquest fitxer no existeix, init inicialitza la línia a 9600 baudis i amb configuracions CLOCAL. Quan init surt del mode d'usuari únic, emmagatzema la configuració del ioctl de la consola en aquest fitxer perquè pugui tornar a utilitzar-los per a la propera sessió d'un sol usuari.

En entrar en un mode multiusuari per primera vegada, Init realitza les entrades d'arrencada i arrencada per permetre que els sistemes de fitxers es munten abans que els usuaris puguin iniciar sessió. A continuació, es processen totes les entrades que coincideixen amb el nivell d'execució.

Quan s'inicia un nou procés, Init primer comprova si existeix el fitxer / etc / initscript. Si ho fa, utilitza aquest script per iniciar el procés.

Cada vegada que un fill finalitza, Init registra el fet i la raó per la qual va morir a / var / run / utmp i / var / log / wtmp, sempre que existissin aquests fitxers.

Canvi de nivells d'execució

Després d'engendrar tots els processos especificats, Init espera que mori un dels seus processos descendents, un senyal de senyal de potència, o fins que Telinit ho assenyale per canviar el nivell d'execució del sistema. Quan es produeix una d'aquestes tres condicions, torna a examinar el fitxer / etc / inittab. Es poden afegir noves entrades a aquest fitxer en qualsevol moment. Tanmateix, init encara espera que es produeixi una de les tres condicions anteriors. Per proporcionar una resposta instantània, la comanda Telinit Q o q pot despertar Init per tornar a examinar el fitxer / etc / inittab.

Si Init no està en mode d'usuari únic i rep un senyal de font de potència (SIGPWR), llegeix el fitxer / etc / powerstatus. A continuació, inicia una ordre basada en el contingut d'aquest fitxer:

  • F (AIL): El poder està fallant, UPS proporciona el poder. Executeu les entrades de power-hop i powerfail.
  • D'ACORD): S'ha restaurat el poder, executeu les entrades de powerokwait.
  • BAIX): El poder està fallant, i el SAI té una poca bateria. Executeu les entrades de powerfailnow.

Si / etc / powerstatus no existeix o conté res més que les lletres F, O o L, Init es comporta com si llegia la lletra F.

No es desaconsella l'ús de SIGPWR i / etc / powerstatus. Qualsevol que vulgui interactuar amb Init hauria d'utilitzar el canal de control / dev / initctl.

Quan es demana a Init que modifiqui el nivell d'execució, envia el senyal d'advertència SIGTERM a tots els processos que no estan definits en el nou nivell d'execució. A continuació, s'espera cinc segons abans de finalitzar la força aquests processos mitjançant el senyal SIGKILL. Tingueu en compte que Init assumeix que tots aquests processos i els seus descendents romanen en el mateix grup de processos que Init originalment va crear per a ells. Si algun procés canvia la seva filiació de grup de processos, no rep aquests senyals. Aquests processos s'han de resoldre per separat.

Telinit

Telinit està enllaçat a / sbin / init. Es necessita un argument d'un caràcter i indica Init per realitzar l'acció adequada. Els següents arguments serveixen com a directives a Telinit:

  • 0, 1, 2, 3, 4, 5 o 6: Tell Init per canviar al nivell d'execució especificat.
  • a, b, c: Tell Init per processar només les entrades de fitxers / etc / inittab amb un nivell de nivell de execució a, b o c.
  • Q o q: Tell Init per tornar a examinar el fitxer / etc / inittab.
  • S o s: Tell Init per canviar al mode d'usuari únic.
  • U o u: Tell init per tornar a executar (conservant l'estat). No es fa un nou examen del fitxer / etc / inittab. El nivell d'execució hauria de ser S, s, 1, 2, 3, 4 o 5; en cas contrari, la sol·licitud s'ignora silenciosament.

Telinit també pot dir a Init quant de temps ha d'esperar entre els senyals SIGTERM i SIGKILL entre els processos d'enviament. El valor per defecte és de cinc segons, però aquest valor es pot canviar amb el -t seg opció.

Telinit només pot ser invocat per usuaris amb privilegis adequats.

El binari Init comprova si és Init o Telinit si examina la seva identificació de procés. L'identificador del procés d'Init real és sempre 1. D'això, es dedueix que en lloc de trucar a Telinit, una persona pot utilitzar Init com a drecera.