Les processus

Demander un devis
Je souhaite télécharger le programme ou imprimer le programme
  • Imprimer

Introduction

 

Lorsque vous lancer un programme sous Linux (que ce soit une application graphique ou une commande), ceci provoque l'apparition d'un processus. Un processus est simplement une tâche qu'est en train d'effectuer votre système d'exploitation. Tant que cette tâche perdure, le processus reste présent.

 

Un processus consomme des ressources matérielles en utilisant notamment le micro-processeur (CPU) et de la mémoire vive (RAM). Si une application "plante", ces ressources sont consommées inutilement.

 

Le but de ce tutoriel est de se familiariser avec la notion de processus pour gérer par exemple une application qui "plante".

 

Notions de base

Terminologie

 

Lorsqu'un processus est créé, il est identifié par un numéro entier appelé PID (processus identifier).  Lorsqu'un processus se termine, il est sensé disparaître de cette table (sinon il est dit zombie).

 

Lorsqu'on souhaite interrompre un processus (typiquement une application qui a planté), on dit que l'on tue ce processus. Ceci consiste à lui envoyer un signal. Il existe plusieurs signaux sous Linux :

  • le signal SIGKILL : l'utilisateur tue une application
  • le signal SIGTERM : le système Linux reboote ou s'éteint,
  • le signal SIGINT : l'utilisateur interrompt une application. C'est ce qui se passe quand on interrompt une commande "longue" à exécuter avec le raccourci ctrl c
  • le signal SIGSEGV : l'application a fait une erreur mémoire (a priori, vous venez d'être victime d'un bogue informatique)
  • ...

Un processus ne peut être tué que par l'utilisateur qui l'a lancé ou root.

 

Un processus peut lancer d'autres processus en cascade. Ce processus est alors dit processus père. Les processus lancés sont dits processus fils. En temps normal, tuer un processus père tue en cascade ses processus fils.

 

Un processus peut être plus ou moins prioritaire sur les autres. En temps normal, c'est le système d'exploitation qui répartit la charge matérielle entre les différents processus. On peut toutefois favoriser certains processus. On utilise pour cela la commande nice (et on peut "renicer" un processus).

 

 

Afficher la table des processus

En mode texte ou dans un terminal

top

 

Pour voir l'évolution de la table des processus au cours du temps, vous pouvez utiliser la commande top :

 

top

 

Elle affiche également l'utilisation de vos ressources matérielles (RAM utilisée, swap utilisée, charge CPU...)

Appuyez sur la touche q pour quitter.

 

ps

 

Pour afficher les processus qui tournent à un instant donné, utilisez la commande ps. Celle-ci possède de nombreuses options que vous pouvez retrouver dans la page de man dédiée.

  • Sans afficher la hiérarchie père/fils : ps aux
  • En affichant la hiérachie père/fils : ps faux

 

Exemple :

 

(mando@silk) (~) $ ps faux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

...
mando     9711  6.8  0.4  78228 19216 ?        Rl   17:52   0:00 /usr/bin/konsole
mando     9713  9.7  0.1   8580  5636 pts/1    Ss   17:52   0:00  \_ /bin/bash
mando     9755  0.0  0.0   4084  1008 pts/1    R+   17:52   0:00      \_ ps faux

 

Ici on voit que l'utilisateur a lancé un processus konsole (et dont le PID est 9711), qui a lancé en cascade un processus bash. Dans ce bash (l'interpréteur de ligne de commande), on a lancé la commande "ps faux" (ce qui est normal, puisqu'il est en train d'écrire dans le terminal la table des processus).

 

La commande ps est particulièrement pratique pour récupérer le PID d'un processus. Si par exemple on souhaite retrouver le PID du ou des processus konsole, il suffit de taper :

 

ps aux | grep konsole

En mode graphique

ksysguard

 

Sous KDE, on utilise généralement ksysguard. C'est l'équivalent du gestionnaire de tâche sous windows. Il permet d'afficher la table des processus, de tuer un processus etc...

 

ksysguard

 

Vous pouvez afficher les processus en arbre (hiérarchie père/fils), chercher un processus particulier en vue de le tuer etc... En faisant un clic droit sur les en-têtes de colonnes vous pouvez afficher ou masquer certaines informations (PID, niveau de priorité (courtoisie), etc...).

 

Tuer un processus

kill

 

La commande kill attend en paramètre le PID du processus à tuer. Elle envoie un SIGKILL. Si l'application ne meurt pas, on peut envoyer un signal plus puissant (option -9).

 

Exemple : supposons que je lance une konsole et que je souhaite tuer ce processus. Alors il faut commencer par récupérer son PID.

 

(mando@silk) (~) $ ps aux | grep konsole
mando    12401  7.0  0.4  77848 18892 ?        Rl   15:00   0:00 /usr/bin/konsole
mando    12445  0.0  0.0   3568   832 pts/1    S+   15:01   0:00 grep konsole

 

Ici il s'agit de la première ligne (la seconde concerne le processus grep que nous venons d'appliquer au processus ps). Celle-ci indique que dans notre exemple, le PID est 12401. Le PID sera probablement différent sur votre machine (le PID alloué à un processus dépend des PID qui étaient déjà alloué à cet instant).

 

Pour tuer ce processus on peut lancer la commande :

 

kill 12401

 

... ou encore (si cela ne suffit pas) :

 

kill -9 12401

 

killall

 

La commande killall permet de tuer plusieurs processus d'un coup portant tous le même nom. Cela suppose que vous connaissiez le nom de ce processus (que vous pouvez retrouver avec la commande ps). Par exemple, pour tuer tous les processus konsole :

 

killall konsole

 

xkill

 

Il est souvent fastidieux de récupérer le PID et de taper la commande kill associé. Si l'on cherche à tuer une application graphique (un navigateur internet, un terminal graphique, un explorateur de fichier etc...) vous pouvez lancer la commande :

 

xkill

 

Cela transformera probablement votre curseur de souris en tête de mort. La prochaine application sur laquelle vous cliquez sera tuée. Si par exemple vous souhaitez tuer  votre navigateur, cliquez simplement dessus. Attention à ne pas cliquer sur votre barre gnome ou KDE !

 

Sous KDE, un raccourci clavier permet d'invoquer directement xkill : ctrl alt echap.

 

top

 

La commande top permet de tuer un processus. Il suffit d'appuyer sur la touche "k" (comme kill), de saisir son PID, et le signal envoyé (par exemple 9).

 

ksysguard

 

Sélectionnez le processus à tuer et cliquer sur "Tuer".

 

Mode graphique figé

 

Si votre mode graphique est figé, évitez de redémarrer brutalement votre ordinateur, car vous risquez de perdre des données importantes.

  1. Si vous savez quel processus est coupable et que c'est une application graphique, essayez de le tuer avec xkill (ctrl alt echap sous KDE).
  2. Sinon essayez de tuer le ou les processus qui vous paraissent coupables en travaillant en mode texte. Pour passer en mode texte, appuyez sur ctrl alt f1 (vous avez en tout 6 consoles en mode texte accessibles avec ctrl alt f1 à ctrl alt f6), logguez-vous, et utilisez les commandes kill ou killall de manière adéqute.
  3. Vous pouvez redémarrer le mode graphique soit en relançant le service associé (kdm, gdm ou xdm), soit en appuyant sur ctrl alt backspace.
  4. En dernier recours, passez en mode texte (ctrl alt f1) et redémarrez la machine (ctrl alt suppr).
  5. Si aucun raccourci ne fonctionne (ctrl alt f1, ctrl alt backspace etc...) vous avez probablement une erreur noyau et vous devrez redémarrer la machine avec le bouton d'extinction. Sur un ordinateur portable, cela consiste à maintenir ce bouton enfoncé suffisamment longtemps (de l'ordre de quelques secondes).

Notions avancées

Démons et services

Principe

 

Certains processus tournent en "arrière plan", c'est-à-dire indépendamment d'une session en mode texte ou graphique. Il s'agit typiquement de serveurs réseaux (par exemple un serveur de base de donnée mysql, un serveur ssh, un serveur ftp...). On parle alors de démon. Sous Linux, les démons ont généralement un nom qui se termine par un "d" (par exemple mysqld, sshd, proftpd etc...).

 

Les services sont généralement lancés ou stoppés par le biais d'un script shell appelé service. Ces scripts sont rangés dans /etc/init.d et invoqué à l'aide de la commande "service" (en root). Tous les services fonctionnent sur le même principe. Nous allons illustrer ce fonctionnement avec le service ssh.

 

Exemple : le service ssh

 

Commençons par installer ssh. Sous debian, en root :

 

aptitude install openssh-server

 

Notez que Debian va automatiquement lancer sshd. À ce stade, vous devriez voir le script associé au service apparaître dans /etc/init.d et le démon dans /usr/sbin :

 

ls /etc/init.d

ls /usr/sbin/sshd

 

Selon que vous souhaitez stopper, démarrer, ou redémarrer ce service tapez :

 

service ssh stop

service ssh start

service ssh restart

 

... qui en réalité, lancent respectivement :

 

/etc/init.d/ssh stop

/etc/init.d/ssh start

/etc/init.d/ssh restart

 

Ce script lance, stoppe ou redémarre le processus sshd (cet exécutable est dans /usr/sbin).

Si le service ssh est lancé, vous devriez voir le processus sshd :

 

ps aux | grep sshd

 

Si vous souhaitez à présent désinstaller ssh, tapez en root :

 

aptitude purge ssh

 

Processus attachés et détachés

 

Un processus lancé depuis un terminal est dit attaché à ce terminal. Cela signifie qu'il gèle l'utilisation de ce terminal : toutes les commandes tapées dans ce terminal ne seront utilisées que lorsque ce processus se sera achevé. On peut détacher un processus d'un terminal (et ainsi faire en sorte que les deux soient simultanément utilisable).

 

Afin d'illustrer le concept de processus attaché et détaché, nous allons supposer que nous utilisons un environnement graphique KDE. Vous avez sans doute déjà découvert le terminal graphique (konsole) et le bloc notes (kwrite).

 

Comment détacher un processus (attaché) ?

 

1) Lançons dans une console la commande :

 

kwrite plop.txt

 

On peut tout à fait utiliser kwrite. Ce processus est attaché à la konsole : si l'on essaye de taper une commande dans la konsole, rien ne se passe.  En effet,  le processus kwrite "monopolise" la console.

 

2) Appuyons sur ctrl z. Ceci stoppe le processus kwrite. La konsole redevient utilisable, mais comme kwrite est stoppé, il n'est plus utilisable (interface figée).

 

3) Lançons à présent la commande bg (background) :

 

bg

 

À présent le processus est détacher, on peut tout à fait utiliser la konsole et kwrite. Toutefois, kwrite reste un processus fils de konsole. Si on tue le processus konsole, on tue également le processus kwrite.

 

Remarques :

  • Si on lance kwrite depuis un menu ou depuis un lanceur (par exemple depuis le menu KDE ou en appuyant sur alt f2), ce processus est fils de kdeinit4. Il perdure jusqu'à ce qu'on quitte KDE ou kwrite.
  • Certaines applications (amarok...) sont lancées par le biais d'un loader. Ce loader permet de lancer amarok sans l'attacher à un terminal. C'est la raison pour laquelle si vous lancez amarok depuis un terminal, il n'est pas fils de ce terminal. Si vous fermez ce terminal, amarok reste donc lancé.

Comment lancer un processus directement de manière détachée ?

 

Il suffit d'utiliser l'opérateur &. Exemple :

 

kwrite plop.txt &

 

Comment rattacher un processus détaché ?

 

Il suffit de lancer la commande fg (foreground) :

 

fg

 

Régler le niveau de priorité (courtoisie) d'un processus

 

Le niveau de courtoisie est une valeur comprise entre -20 et 19. Moins un processus est courtois, plus il peut occuper les ressources matérielles au détriment des autres processus. Les niveaux de priorité négatifs sont réservés à root. Vous pouvez voir le niveau de courtoisie grâce à la commande top (colonne PR).

 

nice, renice

 

Vous pouvez préciser le niveau de priorité d'un processus avec la commande nice. Celle-ci prend en paramètre la commande dont il faut régler la priorité et le niveau de courtoisie. Si par exemple vous désirez lancer la commande "kwrite plop.txt & " avec le niveau de courtoisie "4", il suffit de lancer :

 

nice -n 4 kwrite plop.txt &

 

Vous pouvez corriger le niveau de courtoisie attribué à un processus avec la commande renice. Pour plus de détails lisez la page d'aide correspondante :

 

man renice

 

ksysguard

 

ksysguard permet également de changer le niveau de courtoisie attribué à un processus. Faites un clic droit sur le processus en question et cliquez sur "changer le niveau de courtoisie".

 

Étant donné que ksysguard sera a priori lancé avec des droits utilisateurs, vous ne pourrez pas forcément renicer un processus comme bon vous semble. Si vous souhaitez lancer ksysguard avec des droits root, lancez-le grâce via kdesudo :

 

kdesudo ksysguard &
.
X
 
 
 
 
 

You havecharacters left.