Init
# Init

init, in un sistema operativo Unix, è il primo processo che il kernel manda in esecuzione dopo che il computer ha terminato la fase di bootstrap. Esso ha il compito di portare il sistema in uno stato operativo, avviando i programmi e servizi necessari.

Dato che init è sempre il primo processo eseguito, esso ha tipicamente il PID 1. Il suo file di configurazione, sulla maggior parte dei sistemi, è /etc/inittab.

## I runlevel

Solitamente, init viene configurato in modo da potere portare il sistema in diversi stati di esecuzione o livelli operativi della macchina, relativamente ai servizi avviati con caratteristiche diverse, detti runlevel. Ad esempio, può esistere un runlevel in cui il sistema fornisce servizi di rete, come HTTP e FTP, e può essere comodo avere un altro runlevel in cui tali servizi non sono forniti, da utilizzare nei casi in cui la connettività di rete sia mancante o quando è necessario eseguire interventi di manutenzione. init ha il compito di impostare il runlevel iniziale, e di portare il sistema da un runlevel ad un altro.

## Differenza tra sistemi in stile System V e quelli in stile BSD

Esistono due filosofie per organizzare il funzionamento di init:

* Nel metodo System V, a ogni runlevel corrisponde una directory (solitamente /etc/rcX.d, dove X è il numero del runlevel), nella quale risiedono una serie di script i cui nomi iniziano per K (= Kill) o per S (= Start), seguite da un numero. I primi vengono eseguiti quando si abbandona il runlevel, e hanno il compito di terminare i servizi in esecuzione, mentre i secondi vengono eseguiti quando si entra nel runlevel, e servono ad avviare i suoi servizi caratteristici.
* Nel metodo BSD, a ogni runlevel corrisponde uno script (solitamente chiamato /etc/rc.d/rc.X), che ha il compito di prendere tutti i provvedimenti necessari a portare il sistema nel runlevel richiesto.

Un esempio di sistema attuale che utilizza il metodo System V è Gentoo, mentre Slackware preferisce il metodo BSD.

## Processi orfani

Altro importante compito delegato al processo init è quello di prendere in affidamento i processi orfani, che altrimenti non avrebbero più un parent PID valido, assicurandosi di recuperare alla loro terminazione il loro valore di uscita tramite le chiamate di sistema wait o waitpid, in modo da evitare che essi restino nel sistema come processi zombie.

