

Dans les systèmes d'exploitation basés sur Unix , init (abréviation de initialisation ) est le premier processus démarré lors du démarrage du système d'exploitation. Init est un processus démon qui continue de s'exécuter jusqu'à l'arrêt du système. Il est l' ancêtre direct ou indirect de tous les autres processus et adopte automatiquement tous les processus orphelins . Init est démarré par le noyau pendant le processus de démarrage ; une panique du noyau se produit si le noyau ne parvient pas à le démarrer ou s'il s'arrête pour une raison quelconque. Init se voit généralement attribuer l'identifiant de processus 1.
Dans les systèmes Unix tels que System III et System V , la conception de init a divergé des fonctionnalités fournies par init dans Research Unix et ses dérivés BSD . Jusqu'au début des années 2010, la plupart des distributions Linux utilisaient un init traditionnel qui était quelque peu compatible avec System V, tandis que certaines distributions telles que Slackware utilisent des scripts de démarrage de style BSD, et d'autres encore comme Gentoo ont leurs propres versions personnalisées.
Depuis lors, plusieurs implémentations init supplémentaires ont été créées, tentant de répondre aux limitations de conception des versions traditionnelles. Il s'agit notamment de launchd , du Service Management Facility , de systemd , de Runit et d'OpenRC .
Recherche de style Unix/BSD
Recherche Unix init exécute le script shell d'initialisation situé à /etc/rc, puis lance getty sur les terminaux sous le contrôle de /etc/ttys. Il n'y a pas de niveaux d'exécution ; le /etc/rcfichier détermine quels programmes sont exécutés par init. L'avantage de ce système est qu'il est simple et facile à modifier manuellement. Cependant, de nouveaux logiciels ajoutés au système peuvent nécessiter des modifications des fichiers existants qui risquent de produire un système non amorçable.
BSD init était, avant 4.3BSD, le même que init de Research UNIX ; dans 4.3BSD , il a ajouté la prise en charge de l'exécution d'un système de fenêtrage tel que X sur des terminaux graphiques sous le contrôle de /etc/ttys. Pour supprimer l'obligation de modifier /etc/rc, les variantes BSD ont longtemps pris en charge un fichier spécifique au site /etc/rc.localqui est exécuté dans un sous-shell vers la fin de la séquence de démarrage.
Un système entièrement modulaire a été introduit avec NetBSD 1.5 et porté sur FreeBSD 5.0 et ses successeurs. Ce système exécute les scripts dans le /etc/rc.drépertoire. Contrairement à l'ordre des scripts de System V, qui est dérivé du nom de fichier de chaque script, ce système utilise des balises de dépendance explicites placées dans chaque script. L'ordre dans lequel les scripts sont exécutés est déterminé par l' utilitaire rcorder en fonction des exigences énoncées dans ces balises.
Style SysV

Comparé à ses prédécesseurs, UNIX System III d'AT&T a introduit un nouveau style de configuration de démarrage du système, qui a survécu (avec des modifications) dans UNIX System V et est donc appelé « init de style SysV ».
À tout moment, un System V en cours d'exécution se trouve dans l'un des nombres prédéterminés d'états, appelés niveaux d'exécution . Au moins un niveau d'exécution correspond à l'état de fonctionnement normal du système ; en général, les autres niveaux d'exécution représentent le mode mono-utilisateur (utilisé pour réparer un système défectueux), l'arrêt du système et divers autres états. Le passage d'un niveau d'exécution à un autre entraîne l'exécution d'un ensemble de scripts par niveau d'exécution, qui montent généralement des systèmes de fichiers, démarrent ou arrêtent des démons , démarrent ou arrêtent le système X Window , arrêtent la machine, etc.
Niveaux d'exécution
Les niveaux d'exécution de System V décrivent certains états d'une machine, caractérisés par les processus et les démons exécutés dans chacun d'eux. En général, il existe sept niveaux d'exécution, dont trois sont considérés comme « standards », car ils sont essentiels au fonctionnement d'un système :
- Éteindre
- Mode mono-utilisateur (également appelé S ou s )
- Redémarrer
Outre ces niveaux d'exécution standards, les systèmes Unix et similaires traitent les niveaux d'exécution de manière quelque peu différente. Le dénominateur commun, le /etc/inittabfichier, définit ce que fait chaque niveau d'exécution configuré dans un système donné.
Niveaux d'exécution par défaut
Sur les distributions Linux dont le niveau d'exécution par défaut est 5 dans le tableau de droite, le niveau d'exécution 5 appelle un environnement graphique multi-utilisateur exécutant le système X Window , généralement avec un gestionnaire d'affichage comme GDM ou KDM . Cependant, les systèmes d'exploitation Solaris et illumos réservent généralement le niveau d'exécution 5 pour arrêter et éteindre automatiquement la machine.
Sur la plupart des systèmes, tous les utilisateurs peuvent vérifier le niveau d'exécution actuel avec la commande runlevelou who -r. L' utilisateur root modifie généralement le niveau d'exécution actuel en exécutant les commandes telinitou init. Le /etc/inittabfichier définit le niveau d'exécution par défaut avec l' :initdefault:entrée.
Sur les systèmes Unix, le changement de niveau d'exécution s'effectue en démarrant uniquement les services manquants (chaque niveau définissant uniquement ceux qui sont démarrés/arrêtés). Par exemple, le changement d'un système du niveau d'exécution 3 au niveau 4 peut uniquement démarrer le serveur X local. En revenant au niveau d'exécution 3, il serait à nouveau arrêté.
Autres implémentations
Traditionnellement, l'un des principaux inconvénients d'init est qu'il démarre les tâches en série, en attendant que chacune d'elles termine son chargement avant de passer à la suivante. Lorsque les processus de démarrage finissent par bloquer les entrées/sorties (E/S), cela peut entraîner de longs délais lors du démarrage. L'accélération des E/S, par exemple en utilisant des SSD, peut réduire les délais, mais ne résout pas la cause profonde.
Divers efforts ont été faits pour remplacer les démons init traditionnels afin de résoudre ce problème de conception et d'autres, notamment :
- Scripts de démarrage dans GoboLinux
- busybox-init , adapté aux systèmes d'exploitation embarqués , utilisé par Alpine Linux , SliTaz 5(Rolling), Tiny Core Linux et VMware ESXi , et utilisé par OpenWrt avant d'être remplacé par procd
- Dinit, un gestionnaire de services et un système d'initialisation.
- Epoch, un système d'initialisation Linux monothread axé sur la simplicité et la gestion des services
- Initng , un remplacement complet de init conçu pour démarrer les processus de manière asynchrone
- launchd , un remplacement pour init dans Darwin / macOS / iOS / tvOS à partir de Mac OS X v10.4 (il lance SystemStarter pour exécuter les anciens processus « rc.local » et SystemStarter)
- OpenRC , un générateur de processus qui utilise l'init fourni par le système, tout en fournissant une isolation de processus, un démarrage parallélisé et une dépendance de service ; utilisé par Alpine Linux , Gentoo et ses dérivés, et disponible en option dans Devuan et Artix Linux
- runit , un remplacement complet multiplateforme pour init avec démarrage parallèle des services, utilisé par défaut dans Void Linux
- Sun Service Management Facility (SMF), un remplacement/une refonte complète de init à partir de zéro dans illumos / Solaris à partir de Solaris 10, mais lancé comme seul service par l'init de style System V d'origine
- Shepherd , le gestionnaire de services et de démons GNU qui fournit une initialisation asynchrone basée sur les dépendances ; écrit en Guile Scheme et conçu pour être piratable de manière interactive pendant le fonctionnement normal du système
- s6, une suite logicielle qui comprend un système d'initialisation.
- systemd , une suite logicielle, remplacement complet de init sous Linux qui comprend un démon init, avec démarrage simultané de services, gestionnaire de services et d'autres fonctionnalités.
- SystemStarter , un générateur de processus démarré par l'init de style BSD dans Mac OS X avant Mac OS X v10.4
- Upstart , un remplacement complet de init conçu pour démarrer les processus de manière asynchrone. Initié par Ubuntu et utilisé par eux jusqu'en 2014. Il a également été utilisé dans Fedora 9, Red Hat Enterprise Linux 6 et ChromeOS de Google .
Depuis février 2019 , systemd a été adopté par la plupart des principales distributions Linux.