Page précédente Page suivante Table des matières

2. Le processus init

Toute exécution sous Linux passe par un processus (schématisons, schématisons...), et tout processus est créé par un autre processus : on a donc une « généalogie » de processus et on parle alors de « processus pères » et de « processus fils ».

Le processus init est l'ancêtre de tous les processus, c'est le premier lancé et c'est pour ça qu'il est identifié par le numéro 1. Tout processus est connu du système par son PID (Processus ID), faites « ps aux --sort=pid » pour voir la liste des processus en cours et leurs PID, triés selon ces derniers. Voici ce que donne cette commande sur une Red Hat 5.1. :

$ ps aux --sort=pid
USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
root         1  0.0  0.4   780   416  ?  S    11:34   0:04 init [3] 
root         2  0.0  0.0     0     0  ?  SW   11:34   0:00 (kflushd)
root         3  0.0  0.0     0     0  ?  SW   11:34   0:00 (kswapd)
root       103  0.0  0.3   752   364  ?  S    11:34   0:00 kerneld 
root       192  0.0  0.4   812   460  ?  S    11:34   0:00 syslogd 
root       201  0.0  0.6  1008   640  ?  S    11:34   0:00 klogd 
daemon     212  0.0  0.4   792   408  ?  S    11:34   0:00 /usr/sbin/atd 
root       223  0.0  0.4   804   448  ?  S    11:34   0:00 crond 
root       234  0.0  0.4   788   424  ?  S    11:34   0:00 inetd 
root       245  0.0  0.4   836   420  ?  S    11:34   0:00 lpd 
root       261  0.0  0.8  1352   848  ?  S    11:34   0:00 sendmail: accepting connections on port 25 
root       273  0.0  0.3   760   352  ?  S    11:34   0:00 gpm -t ms 
news       296  0.0  2.2  2724  2148  ?  S    11:34   0:08 /usr/lib/news/bin/actived 
news       298  0.0  2.7  3256  2612  ?  S    11:34   0:01 /usr/sbin/innd -p4 -i0 -L 
jaco       313  0.0  0.9  1460   932   1 S    11:34   0:00 /bin/login -- jaco 
root       314  0.0  0.3   744   320   2 S    11:34   0:00 /sbin/mingetty tty2 
root       315  0.0  0.3   744   320   3 S    11:34   0:00 /sbin/mingetty tty3 
root       316  0.0  0.3   744   320   4 S    11:34   0:00 /sbin/mingetty tty4 
root       317  0.0  0.3   744   320   5 S    11:34   0:00 /sbin/mingetty tty5 
root       318  0.0  0.3   744   320   6 S    11:34   0:00 /sbin/mingetty tty6 
root       320  0.0  0.2   736   244  ?  S    11:34   0:00 update (bdflush) 
news       321  0.0  0.3   928   288  ?  S    11:34   0:00 /usr/lib/news/bin/crosspost -s - 
news       322  0.0  0.3   928   312  ?  S    11:34   0:00 /usr/lib/news/bin/overchan 
jaco       323  0.0  0.8  1168   772   1 S    11:35   0:00 -bash 
jaco       334  0.0  0.6  1096   576   1 S    11:35   0:00 sh /usr/X11R6/bin/startx 
jaco       335  0.0  0.7  1840   684   1 S    11:35   0:00 xinit /home/jaco/.xinitrc -- 
root       336  1.1  7.5 10984  7196  ?  S    11:35   4:48 /usr/X11R6/bin/Xwrapper :0 
jaco       339  0.1  2.4  3264  2308   1 S    11:36   0:40 wmaker 
root       344  0.0  1.7  2960  1696   1 S    11:36   0:00 xterm -sb 
root       345  0.0  2.2  2960  2156   1 S    11:36   0:02 xterm -sb 
root       346  0.0  2.5  3208  2412   1 S    11:36   0:18 xterm -sb 
(...)
jaco      2879  0.0  0.5   868   512  p1 R    18:50   0:00 ps aux --sort=pid 

Si init, comme on a pu le vérifier par la commande précédente, est le premier processus, qui le lance ? Le noyau, qui, après avoir été chargé en mémoire, commence à s'exécuter et initialise tous les pilotes de périphériques qu'il détecte, puis termine sa phase de démarrage en lançant /sbin/init. Si le noyau ne trouve pas init, il tente de lancer /bin/sh (qui est un lien symbolique vers /bin/bash) et, si cela échoue encore, le démarrage s'interrompt.

Lorsqu'init est lancé, il prend en charge la fin de la procédure de démarrage en réalisant certaines tâches d'administration système : vérification du système de fichiers racine, montage des autres systèmes de fichiers, activation du swap, initialisation des différents services principaux, etc. et, enfin, autorisation des connexions des utilisateurs. À partir de là, le système est soit en « mode mono-utilisateur », soit en « mode multi-utilisateurs » (cas le plus fréquent).

Toutes ces tâches sont configurées et réalisées par des « scripts d'initialisation », qui ne sont que de simples scripts shell (équivalent des .BAT de MS-DOS). Sous Linux, ces scripts sont regroupés sous /etc.

NB : Toutes les distributions Linux (à mon humble connaissance...) utilisent le paquetage sysvinit, basé sur l'init de System V (lire « System 5 », pas « System vé »...), et c'est donc celui-ci que nous étudierons.

La principale caractéristique de l'init de System V est qu'il définit des « niveaux d'exécution » (runlevels).


Page précédente Page suivante Table des matières