init è uno di quei programmi che sono assolutamente necessari per il funzionamento di un sistema Linux, ma che si può quasi sempre ignorare. Una buona distribuzione di Linux avrà una configurazione di init che funzioni con la maggior parte dei sistemi, e su questi sistemi non ci sarà bisogno di fargli niente. Di solito preoccuparsi di init serve solo se agganciate terminali seriali, modem in ingresso (non in uscita) o se volete cambiare il runlevel di default.
Quando si è avviato il kernel (cioè quando è stato caricato in memoria, si è inizializzato ed ha inizializzato tutti i driver di device, le strutture dati e cose del genere), finisce la sua parte del processo di boot facendo partire un programma a livello utente, init ; quindi, init è sempre il primo processo (e il suo numero di processo è sempre 1).
Il kernel cerca init in alcuni posti in cui viene tenuto storicamente, ma il suo posto corretto (su un sistema Linux) è /sbin/init . Se il kernel non trova init cerca di avviare /bin/sh , e se non riesce a fare neanche quello fallisce l'avvio del sistema. Quando init parte completa il processo di boot portando a termine diversi compiti di amministrazione, come il controllo dei filesystem, la pulizia di /tmp , l'avvio di svariati servizi e di una getty per ogni terminale e console virtuale a cui si possano collegare gli utenti (vedere il capitolo 8).
Dopo che il sistema è partito correttamente, ogni volta che un utente si scollega init fa ripartire una getty nel terminale corrispondente (in modo che l'utente successivo possa ricollegarsi). init adotta anche i processi orfani: quando un processo avvia un processo figlio e muore prima di esso, quest'ultimo diventa figlio di init ; è importante per varie ragioni tecniche, ma è bene saperlo, perché facilita la comprensione degli elenchi e degli alberi dei processi.7.1
Sono disponibili anche alcune varianti di init : la maggior parte dei sistemi Linux usano sysvinit (scritto da Miquel van Smoorenburg), che è basato sull'init del System V. Le versioni BSD di Unix hanno un init diverso. La differenza principale sono i runlevel: il BSD non ce l'ha (almeno tradizionalmente), ma non è una differenza essenziale. Noi vedremo solo il sysvinit .