Page suivante Page précédente Table des matières
2. Le processus
initToute 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
initest 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=pidSi
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 pasinit, 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'
initest 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'initde System V (lire « System 5 », pas « System vé »...), et c'est donc celui-ci que nous étudierons.
La principale caractéristique de l'
initde System V est qu'il définit des « niveaux d'exécution » (runlevels).
Page suivante Page précédente Table des matières