Cours Linux : Partie 3

Un article de LaPageDuJour.

Aller Ă  : Navigation, Rechercher

Dans cette partie du cours, nous allons voir comment gérer les processus sous Linux.

Sommaire

[modifier] Gestion des processus

[modifier] La commande "ps"

La commande ps permet de voir les processus systÚmes actuellement exécutés.

Si vous l'Ă©xĂ©cutez sans argument, vous n'aurez que les processus ouvert dans la session locale (c'est Ă  dire le shell : bash et l'application ps elle mĂȘme :

superfc@ovh1:~$ ps
  PID TTY          TIME CMD
19780 pts/1    00:00:00 bash
19784 pts/1    00:00:00 ps

Il est gĂ©nĂ©ralement utilisĂ©e en tapant ps aux, celle ci commence par des tĂȘtes de colonne comme suit :

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

Celles ci signifient :

  • USER : L'utilisateur
  • PID : Le PID (processus ID)
  •  %CPU : Le pourcentage d'utilisation CPU (au moment de l'Ă©xĂ©cution de ps)
  •  %MEM : Le pourcentage d'utilisation de la mĂ©moire
  • VSZ : (on s'en fout) c'est la mĂ©moire virtuelle allouĂ©e
  • RSS : C'est la mĂ©moire rĂ©ellement allouĂ©e
  • TTY : Terminal sur lequel est Ă©xĂ©cutĂ© la commande
  • STAT : Statut de la commande
  • START : Heure ou Date (si plus d'un jour) de dĂ©marrage de la commande
  • TIME : Temps d'execution processeur
  • COMMAND : Commande Ă©xĂ©cutĂ©e


Nous allons ici nous limiter aux processus de mysql :

superfc@ovh1:~$ ps aux|grep mysqld
root      6442  0.0  0.2   3896  1220 ?        SN   Jan02   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     6479  0.8  8.6 254872 43636 ?        SNl  Jan02 171:55 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
superfc  19818  0.0  0.1   3104   768 pts/1    SN+  09:57   0:00 grep mysqld

Nous voyons ici que mysql utilise 0.8% du processeur 8.6% de la mémoire et qu'en ayant démarré le 02/01/2008, il a consommé pratiquement 172 minutes de temps processeur. C'est à dire pratiquement 3h de temps processeur.

[modifier] Les commandes "kill" et "killall"

La commande kill permet d'arrĂȘter un processus en cours d'exĂ©cution Ă  partir de son PID.

Imaginions que vous deviez tuer le processus ntpd, vous allez d'abord le rechercher :

superfc@ovh1:~$ ps aux|grep ntpd
ntp       3158  0.0  0.2   4128  1060 ?        Ss    2007   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -u 106:109 -g
superfc  19912  0.0  0.1   3104   768 pts/1    SN+  10:09   0:00 grep ntpd
Vous voyez qu'il un PID 3158. Vous pouvez le tuer en tapant :
kill 3158
Si le processus rĂ©siste encore, vous pouvez forcer l'arrĂȘt de celui ci en utilisant le signal d'arrĂȘt 9 :
kill -9 3158

Bien sur, pour tuer un processus, il faut en ĂȘtre le propriĂ©taire ou ĂȘtre root.


La commande killall permet quant Ă  elle de taper directement le nom du processus que vous souhaitez arrĂȘter :

killall ntpd

[modifier] La commande "top"

La commande top permet de voir les processus systÚme actuellement exécutés en rafraichissant l'affichage réguliÚrement.

superfc@ovh1:~$ top
top - 10:15:17 up 67 days, 22:19,  1 user,  load average: 0.00, 0.01, 0.00
Tasks:  91 total,   2 running,  89 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.3%sy,  5.6%ni, 93.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    504708k total,   482836k used,    21872k free,   115248k buffers
Swap:   522104k total,    58668k used,   463436k free,   155984k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 6479 mysql     20   5  248m  42m 5452 S    0  8.6 172:03.95 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/
 4381 proxy     15   0 30688  20m 2252 S    0  4.2  37:28.01 (squid) -D -sYC
27910 bind      19   0 41612 5208 2000 S    0  1.0   6:52.90 /usr/sbin/named -u bind
 2846 root      34  19  1620  580  456 S    0  0.1   3:19.17 /sbin/syslogd                                                                         31175 root      34  19     0    0    0 S    0  0.0   3:17.51 [pdflush]
  184 root      34  19     0    0    0 S    0  0.0   1:34.10 [kswapd0]
 3034 root      35  19     0    0    0 S    0  0.0   1:26.62 [pdflush]
 3118 root      34  19  4924  736  636 S    0  0.1   0:53.40 /usr/sbin/sshd
29057 root      34  19  4812 1328 1228 S    0  0.3   0:38.28 /usr/lib/postfix/master
29061 postfix   22   0  5096 1668 1332 S    0  0.3   0:23.45 qmgr -l -t fifo -u -c
18423 www-data  34  19 14160 6952 4264 S    0  1.4   0:19.51 /usr/local/apache/bin/httpd
18426 www-data  35  19 14108 6884 4244 S    0  1.4   0:19.00 /usr/local/apache/bin/httpd
18710 www-data  34  19 14104 6848 4216 S    0  1.4   0:17.89 /usr/local/apache/bin/httpd
18424 www-data  34  19 14144 6988 4348 S    0  1.4   0:17.66 /usr/local/apache/bin/httpd

top nous donne une mine d'informations sur l'Ă©tat du systĂšme. Son principal intĂ©rĂȘt est dans le classement des donnĂ©es. Pour avoir un rafrĂąichissement rapide (toutes les demi-secondes), tapez : top -d 0.5.

Une fois que vous ĂȘtes dans top, vous avez certaines commandes intĂ©ressantes :

  • Tapez "T" pour classer les processus en fonction de leur consommation processeur.
  • Tapez "M" pour classer les processus en fonction de leur consommation de mĂ©moire.
  • Tapez "B" pour permettre la surbrillance.
  • Tapez "b" pour changer le mode d'affichage des processus en cours d'Ă©xĂ©cution.
  • Tapez "c" pour afficher la commande complĂšte Ă©xĂ©cutĂ©e.
  • Tapez "W" pour sauver les paramĂštres actuels en configurations

Pour afficher le dernier processeur utilisĂ© par chaque processus (dans le cas d'un environnement multi-processeur), dans top, tapez : "f" pour passer en mode de sĂ©lection de colonne, "j" pour choisir la colonne du dernier processeur utilisĂ© puis "[Enter]" pour revenir Ă  l'affichage classique de top.

[modifier] Les commandes "nice" et "renice"

Vous pouvez avec ces commandes modifier la priorité des processus de -20 (haute priorité) à 20 (faible priorité). Si vous avez un processus trÚs gourmand en ressources mais dont la rapidité n'est pas critique, il est conseillé de l'exécuter en priorité 20.

Bien sur, ces paramĂštres n'ont d'influence que lorsque le systĂšme est surchargĂ© (ce qui peut-ĂȘtre une situation "normale").

Pour executer un processus (ici "top") en faible prioritĂ© :

nice -n 20 top

Et pour changer la prioritĂ© d'un processus, tapez :

renice 20 -p <pid>

A noter que cette commande permet Ă©galement de modifier les prioritĂ©s de tous les processus d'un utilisateur :

renice 20 -u <utilisateur>

[modifier] Exécution des commandes

[modifier] Redirection sur un fichier

Vous pouvez rediriger la sortie standard (stdout) et la sortie d'erreur (stderr) des programmes sur un fichier et l'entrĂ©e standard (stdin) des programmes depuis un fichier :

application >sortie.txt 2>sortie-err.txt <entree.txt

Pour ne pas ecraser les fichiers Ă  chaque Ă©xĂ©cution de cette commande mais plutĂŽt ajouter des informations (en mode dit "append"), utiliser ">>" au lieu de ">", c'est Ă  dire :

application >>sortie.txt 2>>sortie-err.txt <entree.txt

[modifier] Tubes

Les tubes permettent de rediriger la sortie standard d'un programme (stdout) sur l'entrée standard d'un autre programme (stdin).

La commande more permet d'afficher le contenu d'un fichier ou d'une entrĂ©e standard en dĂ©filement. Ainsi, si vous tapez :
ls -lha|more
vous aurez le contenu détaillé de votre répertoire en plusieurs écrans.