Catégorie : Comprendre     Tags :      

    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 -20 et 19 (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

    Posté par (La rédaction) | Signature : Alexandre Courbot | Article paru dans

    Laissez une réponse

    Vous devez avoir ouvert une session pour écrire un commentaire.


    • Il y a actuellement

    • 666 articles/billets en ligne.