INIT(8)

NOME
init, telinit - inizializzatore del controllore dei processi

SINTASSI
/sbin/init [ -t sec ] [ 0123456SsQq ]
/sbin/telinit [ -t sec ] [ 0123456sSQqabc ]

DESCRIZIONE

  Init
Init è il padre di tutti i processi. Il suo compito principale è di creare processi da uno script immagazzinato nel file /etc/inittab (si veda inittab(5)). Questo file ha, di solito, delle voci che fanno sì che init avvii getty su ogni riga nella quale possono loggarsi gli utenti. Controlla anche processi autonomi richiesti da qualsiasi sistema.

RUNLEVEL
Un runlevel è una configurazione software del sistema che permette l'esistenza solo di un gruppo selezionato di processi. I processi avviati da init per ognuno di questi runlevel sono definiti nel file /etc/inittab. Init può essere in uno degli otto runlevel, 0–6 e S o s. Il runlevel è cambiato da un utente privilegiato lanciando /sbin/telinit, il quale invia un segnale appropriato a init, indicandogli a quale runlevel passare.

I runlevel 0, 1 e 6 sono riservati. Il runlevel 0 è usato per fermare (halt) il sistema, il runlevel 6 è usato per riavviare (reboot) il sistema e il runlevel 1 è usato per portare il sistema in single user mode. Il runlevel S non è in realtà pensato per essere usato direttamente, ma più che altro per gli script che sono eseguiti quando si entra nel runlevel 1. Per maggiori informazioni su questo, si vedano le pagine di manuale di shutdown(1) e inittab(5).

Sono validi anche i runlevel 7-9, sebbene non realmente documentati. Ciò perché le varianti di Unix "tradizionali" non li usano. Nel caso lo si voglia sapere, i runlevel S e s sono di fatto lo stesso. Internamente sono un alias per lo stesso runlevel - ciò è solo un rimasuglio del modo che l'autore usò quando scrisse sysvinit.

AVVIAMENTO
Dopo che init è lanciato come ultimo passo dell'avvio (boot) del kernel, cerca se nel file /etc/inittab c'è una voce del tipo initdefault (si veda inittab(5)). initdefault specifica il runlevel iniziale del sistema. Se non c'è tale voce o non c'è il file /etc/inittab, un runlevel deve essere immesso nella console del sistema.

Il runlevel S o s porta il sistema in modalità utente singolo (single user mode) e non necessita del file /etc/inittab. In modalità single user, è lanciato /bin/sh in /dev/console.

Quando si entra in single user mode, init legge lo stato ioctl(2) 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 il single user mode, salva le impostazioni ioctl della console in questo file cosicché possa riusarli nella successiva sessione in single-user.

Quando si entra per la prima volta in modalità multiutente, init esegue le voci boot e bootwait che permettono al filesystem di essere montato prima che un utente possa loggarsi. Poi sono eseguite tutte le voci corrispondenti al runlevel.

Quando avvia un nuovo processo, init per prima cosa guarda se esiste il file /etc/initscript. Se c'è, usa questo script per far partire il processo.

Ogni volta che un processo figlio termina, init salva questo fatto e la ragione per la quale è morto nei file /var/run/utmp e /var/log/wtmp (se esistono).

CAMBIO DI RUNLEVEL
Dopo aver avviato tutti i processi specificati, init aspetta che uno dei suoi processi figlio muoia, un segnale di powerfail, o fino a che non riceve un segnale da /sbin/telinit per cambiare il runlevel del sistema. Quando avviene una delle tre condizioni suddette, riesamina il file /etc/inittab. A questo file possono essere aggiunte nuove voci quando si vuole. Comunque, init aspetta sempre che avvenga una delle tre condizioni suddette. Per ottenere una risposta istantanea, si possono usare i comandi Q o q per risvegliare init e fargli riesaminare il file /etc/inittab.

Se init non è in single user mode e riceve un segnale di powerfail, saranno invocate apposite voci per il powerfail.

Quando a init è richiesto di cambiare il runlevel, invia il segnale di avviso SIGTERM a tutti i processi che non sono definiti nel nuovo runlevel. Poi aspetta 5 secondi prima di terminare forzatamente questi processi tramite il segnale di kill SIGKILL. Si noti che init assume che tutti questi processi (e i loro discendenti) rimangano nello stesso gruppo di processi nel quale init li ha creati in origine. Se un qualsiasi processo cambia il suo process group non riceverà questi segnali. Questi processi devono essere terminati a parte.

TELINIT
/sbin/telinit è linkato a /sbin/init. Accetta un carattere singolo come argomento e segnala a init di effettuare le azioni appropriate. I seguenti argomenti servono come direttive a /sbin/telinit:

0,1,2,3,4,5 o 6
    dicono a /sbin/init di passare al runlevel specificato.

a,b,c
    dicono a /sbin/init di processare solo quelle voci del file /etc/inittab che hanno runlevel a,b o c.

Q o q
    dice a /sbin/init di riesaminare il file /etc/inittab.

S o s
    dice a /sbin/init di passare in single user mode.

/sbin/telinit può dire a init anche quanto tempo dovrebbe attendere tra l'invio ai processi del TERM signal e l'invio del KILL signal; di default è 5 secondi, ma può essere cambiato con l'opzione -t sec.

/sbin/telinit può essere invocato solo da utenti con i privilegi appositi.

FILE
/etc/inittab
/etc/initscript
/dev/console
/etc/ioctl.save
/var/run/utmp
/var/log/wtmp
/dev/initctl

AMBIENTE
Init imposta le seguenti variabili d'ambiente per tutti i suoi figli:

PATH
    Di default a /bin:/usr/bin:

INIT_VERSION
    A quel che dice il nome. Utile per determinare se uno script è stato lanciato direttamente da init.

RUNLEVEL
    Il runlevel attuale del sistema.

PREVLEVEL
    Il runlevel precedente (utile dopo un cambio di runlevel).

BOOTFLAG
È possibile passare diverse opzioni a init dal bootmonitor (p.es. LILO). Init accetta i flag seguenti:

S, single
    Boot in single user mode. In questa modalità è esaminato /etc/inittab e lo script rc bootp è di solito eseguito prima di avviare la shell del single user mode.

1-5 Runlevel nei quali fare il boot.

-b, emergency
    Fa il boot direttamente nella single user shell senza lanciare nessun altro script di startup.

CONFORME A
Init è compatibile con il System V init. Lavora in stretto ``contatto'' con gli script nelle directory /etc/init.d e /etc/rc{runlevel}.d. Se il proprio sistema usa queste convenzioni, ci dovrebbe essere un file README nella directory /etc/init.d che spiega come funzionano questi script.

AVVERTENZE
Init assume che i processi e i loro discendenti rimangano nello stesso process group che è stato originariamente creato per loro. Se i processi cambiano il loro gruppo, init non può killarli e si potrebbe finire con due processi che leggono da una linea del terminale.

DIAGNOSTICA
Se /sbin/init si accorge che sta eseguendo una voce per più di 10 volte in 2 minuti, assumerà che ci sia un errore nella stringa di comando, e genererà un messaggio d'errore nella console del sistema, e si rifiuterà di rieseguire questa voce finché non siano passati 5 minuti o riceva un signal. Ciò per evitare che init si ``mangi'' tutte le risorse del sistema quando qualcuno fa un errore tipografico nel file /etc/inittab o è rimosso il programma che deve essere lanciato nella voce.

AUTORE
Miquel van Smoorenburg (miquels@cistron.nl), pagina di manuale iniziale di Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).
Traduzione di Giovanni Bortolozzo <borto@dei.unipd.it>

VEDERE ANCHE
getty(1), login(1), sh(1), who(1), shutdown(1), kill(2), inittab(5), initscript(5), utmp(5)