Come usare il comando 'init' in Linux

Dentro è il genitore di tutti Processi Linux. È il primo processo che si avvia all'avvio di un computer e viene eseguito fino allo spegnimento del sistema. È l'antenato di tutti gli altri processi.

Il suo ruolo principale è creare processi da uno script memorizzato nel file /etc/inittab. Questo file di solito memorizza le voci che causano Dentro deporre le uova gettys su ogni riga, in cui gli utenti del sistema possono accedere. Controlla anche i processi autonomi richiesti da qualsiasi sistema particolare.

Tux il pinguino è la mascotte ufficiale di Linux.
Getty Images/John Coulter

Livelli di esecuzione

UN livello di esecuzione è una configurazione software del sistema che consente l'esecuzione solo di un gruppo selezionato di processi. I processi generati da Dentro per ciascuno di questi runlevel sono definiti nel file /etc/inittab. Dentro supporta otto runlevel: 0 attraverso 6 e S o S. Il runlevel cambia quando viene eseguito un utente con privilegi Telinit, che invia segnali appropriati a Dentro, indicando a quale runlevel passare.

I runlevel 0, 1 e 6 sono riservati. Il runlevel 0 arresta il sistema, il runlevel 6 si riavvia il sistema e il runlevel 1 forza il sistema in modalità utente singolo. Runlevel S non è pensato per essere utilizzato direttamente, ma dagli script che vengono eseguiti all'avvio del runlevel 1.

I runlevel da 7 a 9 sono validi ma non ben documentati perché Unix convenzionale le varianti non le usano. I runlevel S e s sono gli stessi.

Avvio

Dopo Dentro viene eseguito come ultimo passaggio del kernel sequenza di avvio, 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 c'è tale voce (o non c'è /etc/inittab affatto), un runlevel deve essere inserito in 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, viene aperta una shell di root su /dev/console.

Quando si accede alla modalità utente singolo, dentro legge le console ioctl stati da /etc/ioctl.save. Se questo file non esiste, dentro inizializza la linea a 9600 baud e con impostazioni CLOCAL. quando dentro lascia la modalità utente singolo, memorizza le impostazioni ioctl della console in questo file in modo che possa riutilizzarle per la prossima sessione utente singolo.

Quando si accede per la prima volta a una modalità multiutente, Dentro esegue le voci boot e bootwait per consentire il montaggio dei file system prima che gli utenti accedano. Quindi, tutte le voci che corrispondono al processo di runlevel.

Quando si avvia un nuovo processo, Dentro prima controlla se il file /etc/initscript esiste. In caso affermativo, utilizza questo script per avviare il processo.

Ogni volta che un bambino finisce, Dentro 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

Schermata di aiuto Telinit

Dopo aver generato tutti i processi specificati, Dentro attende che uno dei suoi processi discendenti muoia, un segnale di powerfail o finché non viene segnalato da Telinit di 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. Però, dentro attende ancora che si verifichi una delle tre condizioni precedenti. Per fornire una risposta istantanea, il Telinit Q il comando si sveglia Dentro per riesaminare il file /etc/inittab.

Se Dentro non è in modalità utente singolo e riceve un powerfail segnale, legge il file /etc/powerstatus. Poi inizia a comando in base al contenuto di questo file:

  • F(AIL): Manca l'alimentazione, l'UPS fornisce l'alimentazione. Esegui il powerwait mancanza di corrente inserimenti.
  • oh(K): L'alimentazione è stata ripristinata, eseguire il powerokwait inserimenti.
  • l(OW): Manca l'alimentazione e la batteria dell'UPS è scarica. Esegui il powerfailnow inserimenti.

Se /etc/powerstatus non esiste o contiene qualcosa di diverso dalle lettere F, O o L, Dentro si comporta come se leggesse la lettera F.

L'utilizzo di SIGPWR e /etc/powerstatus è ora scoraggiato. Usa il canale di controllo /dev/initctl nel moderno distribuzioni Linux.

quando Dentro viene richiesto di modificare il runlevel, invia il segnale di avviso SIGTERM a tutti i processi non definiti nel nuovo runlevel. Quindi attende cinque secondi prima di terminare forzatamente questi processi utilizzando il segnale SIGKILL. Dentro presuppone che tutti questi processi e i loro discendenti rimangano nello stesso gruppo di processi che Dentro originariamente creato 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. Richiede un argomento e segnali di un carattere Dentro per eseguire l'azione appropriata. I seguenti argomenti servono come direttive per Telinit:

  • 0, 1, 2, 3, 4, 5 o 6: Passa al livello di esecuzione specificato.
  • a, b, c: elabora solo le voci del file /etc/inittab con runlevel a, b o c.
  • o Q: riesamina il file /etc/inittab.
  • o S: Passa alla modalità utente singolo. A volte viene chiamata la modalità utente singolo modalità di recupero perché viene spesso utilizzato per eseguire riparazioni di emergenza del sistema.
  • tu o tu: si esegue nuovamente (conservando lo stato). Non si verifica alcun riesame del file /etc/inittab. Il runlevel dovrebbe essere S, s, 1, 2, 3, 4 o 5; in caso contrario, la richiesta viene silenziosamente ignorata.

Telinit può anche dire Dentro quanto tempo deve attendere tra i processi di invio il Segnali SIGTERM e SIGKILL. L'impostazione predefinita è cinque secondi, ma questo valore può essere modificato con il tasto -T secondo opzione.

Telinit può essere invocato solo da utenti con privilegi appropriati.

Il Dentro binario controlla se lo è Dentro Telinit guardando il suo ID di processo. Il vero Dentrol'ID del processo è sempre 1. Da ciò ne consegue che invece di chiamare Telinit, una persona può usare Dentro come scorciatoia.