Dentro è il genitore di tutti i processi di Linux. È il primo processo da avviare all'avvio del computer e viene eseguito fino alla chiusura del sistema. È l'antenato di tutti gli altri processi.
Il suo ruolo principale è quello di creare processi da uno script memorizzato nel file / etc / inittab. Questo file di solito memorizza le voci che causano l'avvio di Gain su ogni riga che gli utenti possono accedere. Controlla inoltre i processi autonomi richiesti da un particolare sistema.
runlevel
UN runlevel è una configurazione software del sistema che consente l'esecuzione solo di un gruppo selezionato di processi. I processi generati da Init per ognuno di questi runlevel sono definiti nel file / etc / inittab. Init può essere in uno degli otto runlevel: da 0 a 6 e S o s. Il runlevel viene modificato facendo eseguire a Telinit un utente privilegiato che invia segnali appropriati a Init, indicando quale runlevel modificare.
I runlevel 0, 1 e 6 sono riservati. Il runlevel 0 viene utilizzato per arrestare il sistema, il runlevel 6 viene utilizzato per riavviare il sistema e il runlevel 1 viene utilizzato per portare il sistema in modalità utente singolo. Runlevel S non è pensato per essere usato direttamente, ma piuttosto per gli script che vengono eseguiti quando si immette il runlevel 1.
Anche i runlevel da 7 a 9 sono validi, sebbene non ben documentati perché le varianti "tradizionali" di Unix non li usano. I runlevels S e s sono uguali. Internamente, sono alias per lo stesso runlevel.
Avvio
Dopo che Init viene invocato come ultimo passaggio della sequenza di avvio del kernel, cerca il file / etc / inittab per vedere se c'è una voce del tipo initdefault . La voce initdefault determina il runlevel iniziale del sistema. Se non è presente alcuna voce (o nessuna / etc / inittab), è necessario immettere un runlevel nella console di sistema.
Runlevel S o s porta il sistema in modalità utente singolo e non richiede un file / etc / inittab. In modalità utente singolo, una shell di root viene aperta su / dev / console.
Quando si entra in modalità utente singolo, init legge gli stati ioctl della console da /etc/ioctl.save. Se questo file non esiste, init inizializza la linea a 9600 baud e con le impostazioni CLOCAL. Quando init lascia la modalità utente singolo, memorizza le impostazioni ioctl della console in questo file in modo che possa riutilizzarle per la sessione successiva per utente singolo.
Quando si immette una modalità multiutente per la prima volta, Init esegue le voci di avvio e di bootwait per consentire il montaggio dei file system prima che gli utenti possano accedere. Quindi, vengono elaborate tutte le voci corrispondenti al runlevel.
Quando si avvia un nuovo processo, Init controlla innanzitutto se il file / etc / initscript esiste. Se lo fa, utilizza questo script per avviare il processo.
Ogni volta che un bambino termina, Init registra il fatto e il motivo per cui è morto in / var / run / utmp e / var / log / wtmp, a condizione che questi file esistano.
Modifica dei runlevel
Dopo aver generato tutti i processi specificati, Init attende la morte di uno dei suoi processi discendenti, un segnale powerfail o finché non viene segnalato da Telinit per modificare il runlevel del sistema. Quando si verifica una di queste tre condizioni, riesamina il file / etc / inittab. È possibile aggiungere nuove voci a questo file in qualsiasi momento. Tuttavia, init attende comunque che si verifichi una delle condizioni sopraindicate. Per fornire una risposta istantanea, il comando Telinit Q o q può riattivare Init per riesaminare il file / etc / inittab.
Se Init non è in modalità utente singolo e riceve un segnale powerfail (SIGPWR), legge il file / etc / powerstatus. Quindi avvia un comando basato sul contenuto di questo file:
- FALLIRE): L'alimentazione non funziona, l'UPS sta fornendo energia. Esegui le voci powerwait e powerfail.
- OK): Il potere è stato ripristinato, eseguire le voci powerokwait.
- BASSO): L'alimentazione non funziona e l'UPS ha una batteria scarica. Esegui le voci powerfailnow.
Se / etc / powerstatus non esiste o contiene qualcosa di diverso dalle lettere F, O o L, Init si comporta come se leggesse la lettera F.
L'utilizzo di SIGPWR e / etc / powerstatus è sconsigliato. Chiunque voglia interagire con Init dovrebbe usare il canale di controllo / dev / initctl.
Quando viene richiesto a Init di modificare il runlevel, invia il segnale di allarme SIGTERM a tutti i processi che non sono definiti nel nuovo runlevel. Quindi attende cinque secondi prima di forzare la chiusura di questi processi usando il segnale SIGKILL. Nota che Init presuppone che tutti questi processi e i loro discendenti rimangano nello stesso gruppo di processi creato inizialmente da Init per loro. Se un processo cambia la sua affiliazione al gruppo di processi, non riceve questi segnali. Tali processi devono essere terminati separatamente.
telinit
Telinit è collegato a / sbin / init. Prende un argomento di un carattere e segnala a Init di eseguire l'azione appropriata. I seguenti argomenti servono come direttive per Telinit:
- 0, 1, 2, 3, 4, 5 o 6: Indica a Init di passare al livello di esecuzione specificato.
- a, b, c: Comunica a Init di elaborare solo le voci del file / etc / inittab con runlevel a, b, o c.
- Q o q: Comunica a Init di riesaminare il file / etc / inittab.
- S o s: Comunica a Init per passare alla modalità utente singolo.
- U o tu: Dì a init di rieseguire se stesso (preservando lo stato). Non avviene alcun riesame del file / etc / inittab. Runlevel dovrebbe essere S, s, 1, 2, 3, 4 o 5; in caso contrario, la richiesta viene silenziosamente ignorata.
Telinit può anche dire a Init quanto deve attendere tra l'invio dei processi dei segnali SIGTERM e SIGKILL. Il valore predefinito è cinque secondi, ma questo valore può essere modificato con -tec opzione.
Telinit può essere invocato solo dagli utenti con i privilegi appropriati.
Il binario Init controlla se è Init o Telinit controllando il suo ID di processo. L'ID del processo di Init reale è sempre 1. Da ciò segue che invece di chiamare Telinit, una persona può usare Init come scorciatoia.




