Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Systèmes d'exploitation > Linux > Maîtrisez les processus avec UNIX > Lecture du tutoriel

Maîtrisez les processus avec UNIX

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : prs513rosewood
Note : 17 / 20 (2 votes)
Visualisations : 2 980

Plus d'informations Plus d'informations
Une application qui plante, impossible de l'arrêter ?

Une copie de fichier qui ne veut pas s'annuler ?

Avec UNIX, ces soucis seront gérés sans interface graphique et avec un vitesse époustouflante (pour peu que votre console soit facilement accessible :p ).

Dans ce tutoriel, nous allons voir comment surveiller de près les processus, les "killer", redémarrer, etc.

C'est d'ailleurs à cause grâce aux processus que je suis entré dans l'univers fabuleux de la console.

Je me présente : prs513rosewood, utilisateur de Mac OS depuis (oulah :D ...) et passionné d'informatique.

Les présentations sont faites, let's begin !
Sommaire du tutoriel :
Icône du chapitre

C'est quoi, un processus ?

Commençons par simple, comprendre le fonctionnement, et surtout savoir ce qu'est un processus.

Les processus...



Il existe en réalité deux types de processus. Les process, et les jobs.

Le process est un petit programme (ou parfois un gros :p ) qui s'exécute sous les ordres de son process parent, qui lui-même s'exécute sous les ordres de son parent, etc.

Le job est un process qui est le descendant uniquement d'un terminal.

Par exemple


Vous exécutez la commande date dans un shell UNIX (en gros, une fenêtre du terminal :-° ). La commande date engendre un process, ou plus précisément un job, qui est l'héritier du shell, qui est lui-meme l'héritier de votre terminal, etc.

Si vous avez compris cela, vous avez fait le plus dur : après, c'est de la rigolade ;) .

... et leur fonctionnement



Un processus est donc avant tout un programme qui s'exécute.

Le navigateur internet que vous avez sous les yeux est un processus, votre Serveur de fenêtres est un processus, tout programme qui s'exécute est un processus, en plus de nombreux processus que vous ne voyez pas (le contrôle parental, par exemple).

À son exécution, un processus se voit attribuer un numéro qui lui sera propre pour son exécution. Si le processus redémarre, il reçoit un nouveau numéro. Ce numéro est appelé PID.

Le processus reçoit aussi d'autres caractéristiques, comme le processus parent, un statut, et d'autres petites choses, comme le temps d'utilisation du processeur.

Intéresserons-nous à l'état des processus. Un processus peut prendre plusieurs états, qui correspondent chacun à une lettre.

Ne vous en faites pas, ce n'est pas tous les jours que vous aurez à vous servir de ces informations.

Voilà, la partie barbante est terminée, passons à la pratique.

Surveiller les processus

On passe maintenant aux choses sérieuses : afficher toutes les informations que l'on vient de découvrir dans le terminal.

Première chose à faire, ouvrir un terminal :-° .

Maintenant, nous allons voir la petite commande ps.

La commande ps



La commande ps affiche les informations sur les jobs dépendant uniquement du terminal (un du ne sera pas affiché par ps). Voici son utilisation :

Code : Console
ps [-aACcefhjlMmrSTuvwx] [-O fmt] [-o fmt] [-p pid] [-t tty]


Comme vous pouvez le voir, ce n'est pas trop compliqué o_O . J'expliquerai plus tard les options et leurs utilisations, contentez-vous de taper ps dans la console.

Voici un résultat possible, qui sera sûrement différent du vôtre, vu que nous n'avons pas le même ordinateur.

Code : Console
PID    TTY         TIME  CMD
2571 ttys000    0:00.01 -bash

Sous certains systèmes d'exploitation, voire certaines versions, la commande ps affiche aussi une colonne STAT, qui indique le statut du processus (R, T, Z, etc.), mais il est possible de l'afficher avec une option.


Nous avons déjà vu ce qu'est le PID, intéressons-nous à la colonne TTY.

TTY est l'abréviation de terminal dans le langage UNIX. Cette colonne indique de quel terminal le job est issu. (Note : tty est aussi une commande, qui indique dans quel terminal vous vous trouvez.)

Voici quelques options intéressantes de la commande ps.

L'optionL'utilisation
-a Affiche tous les jobs exécutés par l'utilisateur et le système
-A Affiche tous les process exécutés par l'utilisateur et le système
-j Affiche plus de caractéristiques sur le processus, comme l'état (colonne STAT)
-m Affiche les processus par ordre d'utilisation de la mémoire, à la place du PID
-r Affiche les processus par ordre d'utilisation du processeur
-x Affiche jobs et process confondus
-u Affiche le nom d'utilisateur à qui appartient le processus


Une des combinaisons d'options les plus courantes pour ps est ps -aux, qui affiche tout les processus en activité et le nom de leur utilisateur.

Plus d'informations sur ps



Code : Console
man ps



La commande ps est intéressante, mais reste limitée, car elle n'affiche pas les informations en temps réel.

Ça, c'est le boulot d'une autre commande, la commande top.

La commande top



La commande top est beaucoup plus complète que ps. Elle indique beaucoup d'informations très intéressantes, et surtout lisibles ;) . Voici son utilisation :

Code : Console
top [-a | -d | -e | -c <mode>]
    [-F | -f]
    [-h]
    [-i <interval>]
    [-k]
    [-L | -l <samples>]
    [-o <key>] [-O <skey>]
    [-p <format>] [-P <legend>]
    [-R | -r]
    [-S]
    [-s <delay>]
    [-T | -t]
    [-U <user>]
    [-u]
    [-W | -w]
    [-X | -x]
    [[-n] <nprocs>]


Je sais que cela ne dit rien à beaucoup d'entre vous, mais retenez plutôt cela :

Code : Console
top [-o <mot-clé>]

Les crochets indiquent que l'option -o est facultative.

Tapez donc top dans le terminal.

Et voici le résultat ;) :

Code : Console
Processes:  69 total, 2 running, 2 stuck, 65 sleeping... 246 threads    18:46:53
Load Avg:  0.08,  0.07,  0.06    CPU usage:  2.40% user,  3.37% sys, 94.23% idle
SharedLibs: num =    7, resident =   57M code, 3092K data, 3964K linkedit.
MemRegions: num =  9678, resident =  223M +   18M private,  132M shared.
PhysMem:  154M wired,  519M active,  233M inactive,  906M used,  111M free.
VM: 6101M + 369M   238683(0) pageins, 32582(0) pageouts
 
  PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
 4233 top          4.7%  0:03.94   1    18     29  488K   200K  1080K    18M 
 4187 mdworker     0.0%  0:00.12   3    51     32  632K  2656K  2148K    30M 
 4168 bash         0.0%  0:00.01   1    14     20  264K   672K   908K    18M 
 4167 login        0.0%  0:00.01   1    17     56  248K   268K  1064K    19M 
 4149 bash         0.0%  0:00.00   1    14     20  256K   672K   908K    18M 
 4148 login        0.0%  0:00.01   1    17     56  248K   268K  1064K    19M 
 4147 terminal     2.0%  0:04.10   3   104-   191 3176K    10M    12M   345M 
 4144 AppleSpell   0.0%  0:00.64   1    29     32  844K  5616K  4176K    33M


Je mets ici seulement une petite partie du résultat.

Pour quitter top, appuyez sur la touche q de votre clavier.

La liste que vous voyez est la liste des processus, avec le PID, le nom du processus, le pourcentage d'utilisation du processeur (CPU), et le temps d'utilisation cumulé du processeur. Les autres colonnes ne sont pas vraiment utiles.

L'en-tête est elle très intéressante, je vais expliquer les points les plus importants, et les informations les plus utiles.

Code : Console
Processes:  69 total, 2 running, 2 stuck, 65 sleeping...


Indique le nombre de processus, ceux qui sont d'état R (running), d'état T (stuck), d'état S (sleeping) et parfois d'autres états.

Code : Console
Load Avg:  0.08,  0.07,  0.06    CPU usage:  2.40% user,  3.37% sys, 94.23% idle


Ce qui est écrit après "Load Avg" (Load average, moyenne de la charge) indique la charge du CPU (voir la news charge des serveurs). On peut donc voir que mon ordinateur s'en sort pépère (petite charge). La première charge est la moyenne des cinq dernières minutes, la deuxième est celle des dix dernières minutes, et la troisième celle de ces quinze derniers minutes :) .

Le "CPU usage" (utilisation du processeur) est le pourcentage d'utilisation du processeur par l'utilisateur (vous :p ), le système et le pourcentage qui est au repos (idle).

Code : Console
PhysMem:  154M wired,  519M active,  233M inactive,  906M used,  111M free.


Le "519M active, 233M inactive" indique la mémoire utilisée (519 Mo) et la mémoire inactive (233 Mo).

Voyons maintenant comment classer les processus par leur utilisation de mémoire, de CPU, etc.

Il faut utiliser l'option -o avec un mot-clé, qui se trouve être cpu pour classer par utilisation du processeur, rsize pour la mémoire, mais voici une liste plus longue.

Citation : Manuel de la commande top
-o <key>
Order the process display by sorting on <key> in descending order. A + or - can be prefixed to the key name to specify ascending or descending order, respectively. The supported key are:

command Command name.

cpu CPU usage.

pid Process ID (default).

prt Number of Mach ports.

reg Number of memory regions.

rprvt Resident private address space size.

rshrd Resident shared address space size.

rsize Resident memory size.

th Number of threads.

time Execution time.

uid User ID.

username Username.

vprvt Private address space size.

vsize Total memory size.


Je ne pense pas que vous aurez besoin de tout cela, mais retenez bien cette option -o.

Voici une autre option bien utile, celle qui sert à régler la fréquence des mises à jour. C'est l'option -s, suivie du nombre de secondes entre chaque mise à jour.

Code : Console
top -s 5 -o cpu


Cette commande va me donner les processus rangés par utilisation du CPU, et mettra à jour l'affichage toutes les cinq secondes.

Plus d'informations sur top



Code : Console
man top


Passons maintenant au contrôle des processus :pirate: .

Gérer les processus

À présent que l'on peut espionner les processus ;) , voyons comment les faire obéir au doigt et à l'oeil.

Une affaire de signaux



Pour parler à un processus, on utilise des signaux, des petits messages que le processus va exécuter. Un signal peut être du type "mets-toi en veille" ou "termine-toi", ou encore "redémarre".

Ces signaux sont traduits en langage courant par TERM (pour terminate, "termine-toi"), KILL (pour tuer), HUP (raccroche, qui peut être considéré comme "redémarre").

Ce sont trois signaux courants, et évidemment, il en existe plein d'autres.

Le signal TERM est utilisé en général pour quitter des applications, mais peut parfois être ignoré par le processus, comme par exemple un "processus fou", qui ne veut pas se terminer.

Le signal KILL est un signal qui ne peut être ignoré par le processus. Il lui ordonne de s'arrêter immédiatement, quelles qu'en soient les conséquences. C'est le signal que l'on utilise pour arrêter les fameux "processus fous".

Les signal HUP est surtout utilisé pour redémarrer un processus lancé par le système. Si c'est un autre processus, il s'arrêtera tranquillement, beaucoup moins violemment qu'avec TERM ou KILL.

Transmettre un signal



Il y a deux grandes commandes pour transmettre un signal. L'une utilise le PID du processus, l'autre son nom.

En utilisant le PID



La commande qui transmet un signal au processus est kill :pirate: .

Voici son utilisation :

Code : Console
kill [-s signal_name] pid ...
kill -l [exit_status]
kill -signal_name pid ...
kill -signal_number pid ...


Comme cela ne dit rien à personne, retenez plutôt celle-là :

Code : Console
kill -nom_du_signal PID
kill -numero_du_signal PID


Par défaut, kill envoie le signal TERM.

Quelques exemples valent mieux qu'un long discours.

Code : Console
kill 552

Envoie le signal TERM au processus 552.

Code : Console
kill -1 1224

Envoie le signal HUP (numéro 1) au processus 1224.

Code : Console
kill -KILL 144

Envoie le signal KILL au processus 144.

Voici la liste des signaux disponibles sur mon ordinateur, révélés par la commande kill -l.

Citation : kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE
9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2


Rassurez-vous, je n'utilise que TERM, et parfois KILL ; tous ces signaux ne sont pas franchement utiles, pas la peine de se prendre la tête avec ça.

En utilisant le nom



Si vous connaissez le nom exact d'un processus, vous pouvez l'arrêter en utilisant la commande killall.

Voici son utilisation (simplifiée ;) ) :

Code : Console
killall -nom_ou_numero_du_signal nom_du_processus


Exemples



Code : Console
killall terminal

Envoie le signal TERM au processus "terminal".

Code : Console
killall -9 iTunes

Envoie le signal KILL au processus "iTunes".

Parfois, les processus correspondant à des applications ont un nom différent de l'application. Par exemple, le processus de Firefox, ne s'appelle pas "Firefox", un killall Firefox ne fonctionnera pas.


Plus d'informations sur kill et killall



Code : Console
man kill
man killall

C'est fini.

À présent, vous savez contrôler les processus, et vous pouvez faire face à toute éventualité de plantage d'une application.
Un top et un kill suffisent pour réguler tous vos processus :) .

Évidemment, vous pouvez toujours utiliser l'interface graphique, mais je trouve que cette technique est particulièrement efficace.

Bon "killage" :p !
Retour en haut Retour en haut


Créé : le 20/11/2007 à 22:21:11
Modifié : le 22/08/2008 à 16:06:59
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 72 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.1237s (0.1088s)