INIT(8)

NOM
init, telinit - Initialisation du contrôle des processus

SYNOPSIS
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t sec ] [ 0123456sSQqabcUu ]

DESCRIPTION

  Init
init est le père de tous les processus. Son rôle premier est de créer les processus à partir d'un script enregistré dans le fichier /etc/inittab (voir inittab(5)). Ce fichier contient des entrées qui font que init génère dynamiquement des getty sur chaque ligne où les utilisateurs peuvent se connecter. Il contrôle également les processus autonomes nécessaires à un système particulier.

NIVEAUX D'EXÉCUTION
Un niveau d'exécution est une configuration logicielle du sytème qui permet à un groupe de processus sélectionnés d'exister. Les processus générés par init pour chacun des niveaux d'exécution sont définis dans le fichier /etc/inittab. init peut être dans l'un des huit niveaux d'exécutions : 0–6 et S ou s. Le niveau d'exécution est modifié par un utilisateur privilégié utilisant telinit. Cela envoie les signaux appropriés à init, lui indiquant dans quel niveau d'exécution entrer.

Les niveaux d'exécution 0, 1 et 6 sont réservés. Le niveau 0 sert à arrêter le système, le niveau 6 sert à redémarrer le système et le niveau 1 sert à entrer dans le mode simple utilisateur. Le niveau S n'est pas vraiment conçu pour être utilisé directement, mais plus pour les scripts exécutés lors de l'entrée dans le niveau 1. Pour plus d'information, voir les pages de manuel shutdown(8) et inittab(5).

Les niveaux d'exécution 7-9 sont également valides bien que pas vraiment documentés. Ce sont de « traditionnelles » variantes Unix, ne les utilisez pas. Au cas où vous seriez curieux, les niveaux d'exécution S et s sont en fait le même. Ce sont, de manière interne, des aliases vers le même niveau d'exécution.

DÉMARRAGE
Après que init ait été invoqué comme dernière étape de la séquence de démarrage du noyau, il cherche, dans le fichier /etc/inittab, une entrée de type initdefault (voir inittab(5)). L'entrée initdefault détermine le niveau d'exécution initial du système. S'il n'y a pas de telle entrée (ou pas de fichier /etc/inittab), un niveau d'exécution devra être saisi sur la console du système.

Les niveaux d'exécution S ou s font entrer le système en mode simple utilisateur et ne nécessitent pas de fichier /etc/inittab. En mode simple utilisateur, /sbin/sulogin est invoqué sur /dev/console.

Lorsqu'on entre en mode simple utilisateur, init initialise les réglages des consoles stty à des valeurs sûres. Le mode Clocal est configuré. La vitesse du matériel et les liaisons ne sont pas modifiées.

Lorsqu'on entre en mode multi utilisateur pour la première fois, init exécute les entrées boot et bootwait afin que les systèmes de fichiers soient montés avant que les utilisateurs ne puissent se connecter. Ensuite, toutes les entrées correspondant au niveau d'exécution sont traitées.

Lorsqu'il démarre un nouveau processus, init vérifie d'abord si le fichier /etc/initscript existe. Si c'est le cas, il utilise ce script pour démarrer le processus.

Chaque fois qu'un fils se termine, init enregistre ce fait et sa raison dans les fichiers /var/run/utmp et /var/log/wtmp s'ils existent.

CHANGER DE NIVEAU D'EXÉCUTION
Après qu'il ait généré tous les processus spécifiés, init attend que l'un des ses processus enfant meure, un signal de panne d'alimentation, ou jusqu'à ce que telinit lui signale de changer le niveau d'exécution du système. Lorsque l'une des conditions précédentes survient, il réexamine le fichier /etc/inittab. De nouvelles entrées peuvent être ajoutées à tout moment dans ce fichier. Toutefois, init attendra toujours que l'une des conditions précédentes survienne. Pour avoir une réponse instantanée, la commande telinit Q ou q peut réveiller init afin qu'il réexamine le fichier /etc/inittab.

Si init n'est pas en mode simple utilisateur et recoit un signal de panne d'alimentation (SIGPWR), il lit le fichier /etc/powerstatus. Il lance ensuite une commande basée sur le contenu du fichier :

F(AIL)
    L'alimentation est défaillante, l'onduleur (UPS) fournit la puissance. Exécuter les entrées powerwait et powerfail.

O(K)
    L'alimentation est à nouveau présente, exécuter les entrées powerokwait.

L(OW)
    L'alimentation est défaillante et la batterie de l'onduleur est faible. Exécuter les entrées powerfailnow.

Si le fichier /etc/powerstatus n'existe pas ou qu'il contient autre chose que les lettres F, O ou L, init se comportera comme s'il avait lu la lettre F.

L'utilisation de SIGPW et /etc/powerstatus est découragée. Ceux qui voudraient interagir avec init devraient utiliser le canal de contrôle /dev/initctl - voir le code source du paquet sysvinit pour plus de documentation.

Lorsqu'il est demandé à init de changer de niveau d'exécution, il envoie le signal d'avertissement SIGTERM à tous les processus qui ne sont pas définis dans le nouveau niveau d'exécution. Il attend ensuite 5 secondes avant de forcer ces processus à se terminer par l'intermédiaire du signal SIGKILL. Notez que init suppose que tous ces processus (et leurs descendants) restent dans le même groupe de processus que init avait créé pour eux. Si un processus a modifié son affiliation de groupe de processus, il ne recevra pas ces signaux. De tels processus devront être terminés séparément.

TELINIT
/sbin/telinit est lié à /sbin/init. Il prend un argument d'un seul caractère et signale à init d'effectuer l'action appropriée. Les arguments suivants servent de directives à telinit :

0,1,2,3,4,5 ou 6
    dire à init de basculer dans le niveau d'exécution spécifié.

a,b,c
    dire à init de ne traiter que les entrées du fichier /etc/inittab qui ont les niveaux d'exécution a, b ou c.

Q ou q
    dire à init de réexaminer le fichier /etc/inittab.

S ou s
    dire à init de basculer en mode simple utilisateur.

U ou u
    dire à init de se ré-exécuter (préservant l'état). Aucun ré-examin du fichier /etc/inittab n'a lieu. Le niveau d'exécution doit être un parmi Ss12345, toute autre requête sera silencieusement ignorée.

telinit peut également indiquer à init combien de temps il doit attendre entre les envois des signaux SIGTERM et SIGKILL aux processus. La valeur par défaut est 5 secondes mais elle peut être modifiée avec l'option -t sec.

telinit ne peut être invoqué que par des utilisateurs ayant les privilèges appropriés.

Le binaire init vérifie s'il s'agit de init ou de telinit en regardeant son PID ; le PID réel de init est toujours 1. À partir de là, plutôt que d'appeler telinit, on peut simplement utiliser init.

ENVIRONNEMENT
init configure, pour tous ses enfants, les variables d'environnement suivantes :

PATH
    /bin:/usr/bin:/sbin:/usr/sbin

INIT_VERSION
    Comme son nom l'indique. Utile pour déterminer si un script a directement été lancé par init.

RUNLEVEL
    Le niveau d'exécution actuel du système.

PREVLEVEL
    Le niveau d'exécution précédent du système (utile après un changement de niveau d'exécution).

CONSOLE
    La console système. Elle est héritée du noyau ; si elle n'est pas configurée, init la configurera avec /dev/console par défaut.

OPTIONS DE DÉMARRAGE
Il est possible de passer plusieurs options à init par l'intermédiaire du chargeur de démarrage (par exemple, LILO). init accepte les options suivantes :

-s, S, single
    Démarrage en mode simple utilisateur. Dans ce mode, /etc/inittab est examiné et les scripts rc de démarrage sont lancés avant que le shell du mode simple utilisateur soit démarré.

1-5 Le niveau d'exécution dans lequel entrer.

-b, emergency
    Démarrer directement dans un shell simple utilisateur sans lancer les autres scripts de démarrage.

-a, auto
    Le chargeur de démarrage LILO ajoute le mot « auto » à la ligne de commande s'il a démarré le noyau avec la ligne de commande par défaut (sans intervention de l'utilisateur). Si cette option est trouvée, init configure la variable d'environnement AUTOBOOT à « yes ». Notez que vous ne pouvez pas utiliser ceci pour des raisons de sécurité. Bien sûr, l'utilisateur peut spécifier « auto » ou -a manuellement sur la ligne de commande.

-z xxx
    L'argument de -z est ignoré. Vous pouvez utiliser ceci pour allonger un peu la ligne de commande, ainsi, cela prendra plus de place dans la pile. init peut ensuite manipuler la ligne de commande pour que ps(1) affiche le niveau d'exécution actuel.

INTERFACE
init se met à l'écoute d'une fifo dans /dev, /dev/initctl, pour des messages. Cette interface n'est pas très bien documentée, ni finie. Ceux qui s'y intéressent devraient étudier le fichier initreq.h dans le sous répertoire src de l'archive du code source de init.

SIGNAUX
init réagit à plusieurs signaux :

SIGHUP
    Même effet que telinit q.

SIGUSR1
    À la reception de ce signal, init ferme et réouvre sa fifo de contrôle /dev/initctl. Utile aux scripts de démarrage lorsque /dev est remonté.

SIGINT
    Normalement, le noyau envoie ce signal à init lorsque la combinaison de touches CTRL-ALT-DEL a été pressée. Cela active l'action ctrlaltdel.

SIGWINCH
    Le noyau envoie ce signal lorsque la touche KeyboardSignal a été pressée. Cela active l'action kbrequest.

CONFORMITÉ
init est compatible avec init System V. Il fonctionne étroitement avec les scripts des répertoires /etc/init.d et /etc/rc{runlevel}.d. Si votre système utilise cette convention, il devrait y avoir un fichier README dans le répertoire /etc/init.d expliquant comment fonctionnent ces scripts.

FICHIERS
/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/dev/initctl

NOTES
init suppose que les processus et leurs descendants restent dans le même groupe de processus que celui qui a été créé pour eux. Si les processus changent leur groupe, init ne pourra pas les tuer et vous pouvez finir avec deux processus lisant sur un seul terminal.

DIAGNOSTICS
Si init trouve qu'il régénère de façon continue une entrée plus de 10 fois en 2 minutes, il considèrera qu'il y a une erreur dans la commande, génèrera un message d'erreur sur la console système et refusera de regénérer cette entrée pendant 5 minutes ou jusqu'à la réception d'un signal. Cela permet d'éviter de dévorer les ressources système lorsque quelqu'un a commis une erreur typographique dans le fichier /etc/inittab ou lorsque le programme correspondant à l'entrée a été supprimé.

AUTEUR
Miquel van Smoorenburg (miquels@cistron.nl), page de manuel initiale par Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).

VOIR AUSSI
getty(1), login(1), kill(1), sh(1), initscript(5), inittab(5), utmp(5), runlevel(8), shutdown(8)

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 26 juin 2006 et révisée le 19 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 8 init ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.