Cours Linux : Partie 3
Un article de LaPageDuJour.
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 ntpdVous voyez qu'il un PID 3158. Vous pouvez le tuer en tapant :
kill 3158Si 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).
more permet d'afficher le contenu d'un fichier ou d'une entrée standard en défilement. Ainsi, si vous tapez : ls -lha|morevous aurez le contenu détaillé de votre répertoire en plusieurs écrans.