Com s'utilitza el comandament Init a Linux

Init és el pare de tots els processos. El seu paper principal és crear processos a partir d'un script emmagatzemat en el fitxer / etc / inittab (veure inittab (5)). Normalment, aquest fitxer té entrades que provoquen init per engendrar cada una de les línies que els usuaris poden iniciar la sessió. També controla els processos autònoms requerits per un sistema en particular.

Nivells d'execució

Un nivell d'execució és una configuració de programari del sistema que permet que només existeixi 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ó: 0-6 i S o s . El nivell d'execució es modifica tenint un telinit d' administració d'usuaris privilegiat, que envia els senyals apropiats per iniciar-los , indicant-li quina modificació de nivell d'execució.

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 reduir el sistema en un únic mode d'usuari. El nivell d'execució S no està destinat a ser utilitzat directament, però més per les seqüències d'ordres que s'executen quan s'introdueix el nivell de nivell d'execució 1. Per obtenir més informació sobre això, consulteu les manpages per apagar (8) i inittab (5).

Els nivells d'execució 7-9 també són vàlids, encara que no estan realment documentats. Això es deu a que les variants tradicionals "Unix" no les utilitzen. En cas de tenir curiositat, els nivells d'execució S i S són, de fet, els mateixos. Internament són àlies del mateix nivell d'execució.

Arrencada

Després que Init sigui invocat 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 (vegeu inittab (5)). 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 porten el sistema al mode d'usuari únic i no requereixen 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 (2) 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, de manera que es pugui tornar a utilitzar per a la propera sessió d'un sol usuari.

Quan s'inicia 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ó, totes les entrades que coincideixin amb el nivell d'execució es processen.

Quan s'inicia un nou procés, init comprova primer si el fitxer / etc / initscript existeix. 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 en / var / run / utmp i / var / log / wtmp , sempre que existeixin aquests fitxers.

Canvi de nivells d'execució

Després d'haver generat tots els processos especificats, init espera que mori un dels seus processos descendents, un senyal de llum de corrent, o fins que sigui senyalitzat per telinit per canviar el nivell d'execució del sistema. Quan es produeix una de les tres condicions anteriors, 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, l' ordre telinit Q o q es pot activar 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)

L'alimentació està fallant, UPS proporciona el poder. Executeu les entrades de power- hop i powerfail .

D'ACORD)

El poder s'ha restaurat, 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, les lletres F , O o L , init es comportaran com si hagués llegit la lletra F.

No es desaconsella l'ús de SIGPWR i / etc / powerstatus . Algú que vulgui interactuar amb init ha d'utilitzar el canal de control / dev / initctl - consulteu el codi font del paquet sysvinit per obtenir més documentació al respecte.

Quan es demana a init que canviï 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 5 segons abans de posar fi a la força aquests processos a través del senyal SIGKILL . Tingueu en compte que init assumeix que tots aquests processos (i els seus descendents) romanen en el mateix grup de processos que inicialment va crear per a ells. Si algun procés canvia la seva filiació de grup de processos, no rebrà aquests senyals. Aquests processos s'han de resoldre per separat.

Telinit

/ sbin / telinit està enllaçat a / sbin / init . Es necessita un argument d'un caràcter i s'inicia els senyals per realitzar l'acció adequada. Els següents arguments serveixen com a directives per telinitar :

0 , 1 , 2 , 3 , 4 , 5 o 6

indi init per canviar al nivell d'execució especificat.

a , b , c

indiqueu a Init que processi només les entrades de fitxers / etc / inittab que tinguin el nivell de desplegament a , b o c .

Q o q

indiqueu a Init per tornar a examinar el fitxer / etc / inittab .

S o s

indiqui init per canviar al mode d'usuari únic.

U o u

digueu-li que es torni a executar (conservant l'estat). No es fa un nou examen del fitxer / etc / inittab . El nivell d'execució hauria de ser un de Ss12345 , en cas contrari, la sol·licitud seria ignorada en silenci.

telinit també pot dir durant quant temps hauria d'esperar entre els senyals SIGTERM i SIGKILL entre els processos d'enviament. El valor predeterminat és 5 segons, però això es pot canviar amb l'opció -t sec .

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

El binari init comprova si és init o telinit mirant la seva identificació de procés ; l 'ID del procés d' inici real és sempre 1 . D'això es dedueix que, en comptes de trucar a telinit, es pot utilitzar init en lloc d'un accés directe.