INIT(8)

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

SYNOPSIS
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/init [ --version ]
/sbin/telinit [ -t SECONDES ] [ 0123456sSQqabcUu ]
/sbin/telinit [ -e VAR[=VAL] ]

DESCRIPTION

  Init
init est le parent de tous les processus. Son rôle principal est de créer des processus à partir d'un script stocké dans /etc/inittab (consultez inittab(5)). Ce fichier comporte généralement des entrées qui forcent init à lancer des getty sur chacune des lignes sur lesquelles des utilisateurs peuvent se connecter. Il contrôle également des processus autonomes nécessaires pour chaque système particulier.

NIVEAUX D'EXÉCUTION
A runlevel is a software configuration of the system which allows only a selected group of processes to exist. The processes spawned by init for each of these runlevels are defined in the /etc/inittab file. init can be in one of eight runlevels: 0–6 and S (a.k.a., s). The runlevel is changed by having a privileged user run telinit, which sends appropriate signals to init, telling it which runlevel to change to.

Les niveaux d'exécution S, 0, 1 et 6 sont réservés. Le niveau d'exécution S est utilisé pour initialiser le système au démarrage. Lors du lancement du niveau d'exécution S (au démarrage) ou 1 (depuis un niveau d'exécution multiutilisateur), le système entre en « mode mono-utilisateur », après lequel le niveau d'exécution est S. Le niveau d'exécution 0 est utilisé pour arrêter le système ; le niveau d'exécution 6 sert au redémarrage du système.

Après avoir démarré dans le niveau S, le système entre automatiquement dans un des niveaux multiutilisateurs 2 à 5, à moins qu'il n'y ait eu des problèmes qui nécessitent une correction de la part d'un administrateur en mode mono-utilisateur. Normalement, après être entré en mode mono-utilisateur, un administrateur effectue la maintenance puis redémarre le système.

Pour plus d'informations, voir les pages de manuel de shutdown(8) et inittab(5).

Runlevels 7–9 are also valid, though not really documented. This is because "traditional" Unix variants don't use them.

Les niveaux d'exécution S et s sont équivalents. Ils sont considérés en interne comme des alias vers les mêmes niveaux.

DÉMARRAGE
After init is invoked as the last step of the kernel boot sequence, it looks for the file /etc/inittab to see if there is an entry of the type initdefault (see inittab(5)). The initdefault entry determines the initial runlevel of the system. If there is no such entry (or no /etc/inittab at all), a runlevel must be entered at the system console.

Les niveaux d'exécution S ou s initialisent le système et ne nécessitent pas de fichier /etc/inittab.

En mode mono-utilisateur, /sbin/sulogin est invoqué sur /dev/console.

When entering single user mode, init initializes the consoles stty settings to sane values. Clocal mode is set. Hardware speed and handshaking are not changed.

Quand il entre en mode multiutilisateur pour la première fois, init exécute les entrées boot et bootwait pour permettre aux systèmes de fichiers de se monter avant que les utilisateurs puissent se connecter. Ensuite, toutes les entrées correspondant au niveau d'exécution sont exécutées.

When starting a new process, init first checks whether the file /etc/initscript exists. If it does, it uses this script to start the process.

Chaque fois qu'un processus enfant se termine, init enregistre cela et la raison pour laquelle il est mort dans /var/run/utmp et /var/log/wtmp, si ces fichiers existent.

CHANGEMENT DE NIVEAU D'EXÉCUTION
Après qu'il ait engendré tous les processus indiqués, init attend qu'un de ses processus enfant meure, qu'un signal indiquant une perte de puissance arrive ou qu'un signal de telinit lui indique qu'il faut changer le niveau d'exécution du système. Quand une de ces trois conditions se produit, il réexamine le fichier /etc/inittab. De nouvelles entrées peuvent être ajoutées à ce fichier à n'importe quel moment. Cependant, init attend qu'une de ces conditions se produise. Pour que le fichier soit pris en compte immédiatement, la commande telinit Q ou q permet de réveiller init pour qu'il réexamine (recharge) le fichier /etc/inittab.

If init is not in single user mode and receives a powerfail signal (SIGPWR), it reads the file /etc/powerstatus. It then starts a command based on the contents of this file:

F(AIL) (échec)
    Power is failing, UPS is providing the power. Execute the powerwait and powerfail entries.

O(K)
    L'alimentation a été rétablie, exécuter les entrées powerokwait.

L(OW) (bas)
    The power is failing and the UPS has a low battery. Execute the powerfailnow entries.

Si le fichier /etc/powerstatus n'existe pas ou contient autre chose que les lettres F, O ou L, init se comportera comme si la lettre F y avait été lue.

Usage of SIGPWR and /etc/powerstatus is discouraged. Someone wanting to interact with init should use the /run/initctl control channel – see the initctl(5) manual page for more documentation about this.

Quand on demande à 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 3 secondes avant de forcer l'arrêt de ces processus avec le signal SIGKILL. Notez que init suppose que tous ces processus (et leurs enfants) restent dans le même groupe de processus que init a créé pour eux. Si un processus change son affiliation à un groupe de processus, il ne recevra pas ces signaux. Ces processus doivent être arrêtés séparément.

TELINIT
/sbin/telinit est un lien vers /sbin/init. Il prend un paramètre d'un caractère et signale à init d'effectuer l'action appropriée. Les paramètres suivants servent de directive à telinit :

0, 1, 2, 3, 4, 5 ou 6
    Demander à init de passer au niveau d'exécution spécifié.

a, b, c
    tell init to process only those /etc/inittab file entries having runlevel a, b or c.

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

S ou s
    Demander à init de passer en mode mono-utilisateur

U ou u
    tell init to re-execute itself (preserving the state). No re-examining of /etc/inittab file happens. Runlevel should be one of Ss0123456 otherwise request would be silently ignored.

telinit peut indiquer à init combien de temps il devrait attendre entre l'envoi des signaux SIGTERM et SIGKILL aux processus. La valeur par défaut est de 3 secondes, mais elle peut être changée avec l'option -t.

telinit -e indique à init de changer l'environnement des processus qu'il lance. Le paramètre de -e est soit de la forme VAR=VAL, qui positionne la variable VAR à la valeur VAL, ou de la forme VAR (sans signe égal), qui retire la variable VAR.

telinit ne peut être appelé que par les utilisateurs avec les droits appropriés.

The init binary checks if it is init or telinit by looking at its process id; the real init's process id is always 1. From this it follows that instead of calling telinit one can also just use init instead as a shortcut.

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

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

INIT_VERSION
    As the name says. Useful to determine if a script runs directly from init.

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

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

CONSOLE
    The system console. This is really inherited from the kernel; however if it is not set init will set it to /dev/console by default.

ATTRIBUTS D'AMORÇAGE
It is possible to pass a number of flags to init from the boot monitor (e.g., LILO or GRUB). init accepts the following flags:

-s, S, single
    Single user mode boot. In this mode /etc/inittab is examined and the bootup rc scripts are usually run before the single user mode shell is started.

1–5 Niveau d'exécution dans lequel il faut démarrer.

-b, emergency
    Démarrage direct d'un interpréteur de commande en mode mono-utilisateur sans lancer aucun autre script de démarrage.

-a, auto
    The LILO boot loader adds the word "auto" to the command line if it booted the kernel with the default command line (without user intervention). If this is found init sets the "AUTOBOOT" environment variable to "yes". Note that you cannot use this for any security measures – of course the user could specify "auto" or -a on the command line manually.

-z xxx
    The argument to -z is ignored. You can use this to expand the command line a bit, so that it takes some more space on the stack. init can then manipulate the command line so that ps(1) shows the current runlevel.

--version
    This argument, when used on its own, displays the current version of init to the console/stdout. It is a quick way to determine which init software and version is being used. After the version information is displayed, init immediately exits with a return code of zero.

INTERFACE
init listens on a fifo as, /run/initctl, for messages. Telinit uses this to communicate with init. The interface is not very well documented or finished. Those interested should study the initreq.h file in the src/ subdirectory of the init source code tar archive.

SIGNAUX
init réagit à plusieurs signaux :

SIGHUP
    Identique à telinit q.

SIGUSR1
    On receipt of this signals, init closes and re-opens its control fifo, /run/initctl. Useful for bootscripts when /dev is remounted.

SIGUSR2
    When init receives SIGUSR2, init closes and leaves the control fifo, /run/initctl, closed. This may be used to make sure init is not holding open any files. However, it also prevents init from switching runlevels. Which means commands like shutdown no longer work. The fifo can be re-opened by sending init the SIGUSR1 signal.

SIGINT
    Normally the kernel sends this signal to init when CTRL-ALT-DEL is pressed. It activates the ctrlaltdel action.

SIGWINCH
    Le noyau envoie ce signal quand la touche KeyboardSignal est pressée. Cela active l'action kbrequest.

CONFORMITÉ
init is compatible with the System V init. It works closely together with the scripts in the directories /etc/init.d and /etc/rc{runlevel}.d. If your system uses this convention, there should be a README file in the directory /etc/init.d explaining how these scripts work.

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

AVERTISSEMENTS
init suppose que les processus et leurs descendants restent dans le même groupe de processus créé initialement pour eux. Si les processus changent leur groupe, init ne peut pas les tuer et cela peut conduire à avoir deux processus qui lisent la même ligne de terminal.

Sur un système Debian, entrer dans le niveau d'exécution 1 force tous les processus à être tués à l'exception des threads du noyau et du script qui s'occupe de tuer les autres processus ainsi que les autres processus de sa session. En conséquence, il n'est pas sûr de passer du niveau d'exécution 1 vers un niveau d'exécution multi-utilisateur : les démons qui étaient démarrés dans le niveau d'exécution S et qui sont nécessaires au bon fonctionnement ne tournent plus. Le système devrait être redémarré.

DIAGNOSTICS
Si init trouve qu'il n'arrête pas de relancer une entrée (plus de dix fois en deux minutes), il supposera qu'il y a une erreur dans la commande, générera une erreur sur la console système et refusera de relancer cette entrée à moins que cinq minutes se soient écoulées ou qu'il ait reçu un signal. Cela permet d'éviter de consommer des ressources système quand quelqu'un a fait une faute de frappe dans le fichier /etc/inittab ou que le programme de l'entrée a été supprimé.

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

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