Retrouvez cet article dans : Linux Pratique Hors série 8
Les systèmes d'exploitation modernes permettent à plusieurs programmes de fonctionner « en même temps ». Cette expression est mise entre guillemets, car généralement (sauf pour le cas des machines multi-processeurs ou des processeurs multi-cœurs), seul un programme peut être exécuté par la machine à un instant donné. Comment le système d'exploitation peut-il alors exécuter plusieurs programmes en même temps ? Tout simplement en allouant le processeur à un programme pendant un quantum de temps très court, puis en le faisant passer à un autre, et ainsi de suite. Le délai très court alloué à chaque programme donne l'impression que tous fonctionnent en même temps, même s'il n'y a qu'une seule ressource processeur dans la machine.
Un processus est l'état d'un programme en cours d'exécution sur le système. À chaque programme en cours d'exécution (The Gimp, OpenOffice, Firefox, etc.) correspond au moins un processus. Ceux-ci sont constitués des éléments suivants :
- Le code du programme à exécuter, c'est-à -dire la forme chargée de l'exécutable correspondant au programme.
- L'espace mémoire dans lequel le programme travaille, contenant ses variables.
- Le numéro du processus (ou
PID), permettant de le référencer de manière unique. - L'état du processus, « actif » s'il s'agit du processus actuellement exécuté par le processeur, « endormi » sinon.
Le système d'exploitation peut ainsi préserver l'état des processus endormis pendant que le processus actif s'exécute. De plus, deux autres valeurs notables sont associées aux processus sous Linux :
- L'identifiant de l'utilisateur propriétaire du processus, généralement celui qui l'a lancé.
- La « courtoisie » (nice) du processus vis-à -vis des autres. Cette valeur est un entier compris entre
-20et19(la valeur par défaut est zéro). Plus cette valeur est petite, plus le processus sera prioritaire sur les autres. Seul l'utilisateur root peut utiliser des valeurs négatives.
On peut distinguer deux types de processus. Les processus « lourds » sont totalement isolés les uns des autres (ils disposent chacun de leur propre zone mémoire). Les processus « légers », au contraire, peuvent partager une zone mémoire en commun, ce qui s'avère pratique dans certains cas (par exemple, un processus chargé de collecter des données pendant qu'un autre les analyse).
La commande ps permet de lister les processus en cours d'exécution sur le système :
$ ps -A u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1628 480 ? Ss Oct12 0:02 /sbin/init ... user 5532 0.0 0.0 2508 992 pts/2 R+ 15:14 0:00 ps -A u
Elle affiche beaucoup d'informations sur les processus, dont l'utilisateur propriétaire, le PID, le temps machine passé à exécuter ce processus, et sa commande correspondante. On voit logiquement que la commande que nous venons de taper est le dernier processus créé par le système. On constate également qu'il y a beaucoup de processus ! Vous pouvez essayer de déterminer lesquels correspondent à vos programmes en cours d'exécution.
Il est possible de changer la courtoisie par défaut d'un processus avec la commande nice :
$ nice -n19 firefox &
lancera ainsi Firefox avec la priorité la plus basse, c'est-à -dire qu'il sera ralenti par le système si d'autres processus se montrent exigeants en ressources.
Enfin, un processus peut recevoir des signaux. Un signal permet de placer un processus dans un état déterminé : gelé, actif, voire de le tuer. La commande kill permet d'envoyer un signal à un processus. Elle nécessite de connaître son PID, que nous pouvons retrouver avec ps. Par exemple, si nous voulons geler le Firefox que nous venons de lancer, il nous suffit de récupérer son PID et de lui envoyer le signal STOP :
$ ps -A u USER      PID %CPU %MEM   VSZ  RSS TTY     STAT START  TIME COMMAND ... user    32682 4.2 10.6 307944 109660 ?      Rl  09:31 15:12 /usr/lib/firefox/firefox-bin ... $ kill -STOP 32682
Notre Firefox est devenu totalement non réactif à nos actions, et pour cause : le système ne l'exécute plus. Le signal CONT permet de reprendre son exécution :
$ kill -CONT 32682
Enfin, les processus récalcitrants peuvent être éliminés sommairement en leur envoyant le signal KILL :
$ kill -KILL 32682
Ces commandes permettent de manipuler les 3 processus de manière primitive. Il existe également des interfaces graphiques à cet effet. Ksysguard sous KDE et Procman sous Gnome (généralement accessibles par la combinaison de touches [Ctrl]+[Échap]) qui permettent de lister et de manipuler les processus de manière graphique (changer la courtoisie, envoyer un signal, etc.).
Retrouvez cet article dans : Linux Pratique Hors série 8

