Sous windows, il existe le "task manager" et sous Ubuntu le "Moniteur Système" propose un environnement graphique pour visualiser les processus et l'utilisation des ressources (gnome-system-monitor, accessible depuis le menu "Système | Administration | Moniteur Système").
Tout comme sous Windows, il est possible de consulter les tâches en cours d'exécution, la consommation des ressources processeurs, de mémoire mais également le trafic réseau.
Tout comme sous Windows, il est également possible de terminer un processus (ou bien de le "tuer" en utilisant le menu contextuel).
A l'avantage de gnome-systeme-monitor, il est également possible de consulter les fichiers ouverts (et donc aussi les connexions réseaux) ainsi qu'une "table d'allocation mémoire".
Si la plupart des utilisateurs seront satisfait avec cette option graphique, d'autres voudront aller un peu plus loin et cette exploration avancée passe par la ligne de commande.
Dans ce domaine, surveiller les processus d'Ubuntu se fait de la même façon que sur n'importe quelle autre machine Linux/Unix.
Processus ID (pid)
Pour commencer, il faut savoir que tout processus Unix (programme, deamon, etc) est identifier par un identifiant unique, il s'appelle "pid".
Cet identifiant est également affiché dans le volet "Processus" du Moniteur Système.
Il est également possible d'obtenir la liste des processus (et pid correspondant) par différentes lignes de commande.
Ce qu'il faut savoir, c'est que le "pid" est une pierre angulaire de la gestion des processus.
free: La mémoire disponible
La commande free permet d'afficher l'état de la mémoire (utiliser-g ou -m pour afficher les résultats en giga ou megaoctects).
xxx@yyy:~$ free -m total used free shared buffers cached Mem: 2508 1392 1116 0 153 710 -/+ buffers/cache: 528 1980 Swap: 11998 0 11998Shared - indique la mémoire partagée entre processus.
Buffers - la mémoire allouée au systèmes d'entrée/sortie.
Cached - la mémoire actuellement utilisé pour faire du cache.
+/- buffers/cache - indique la quantité de mémoire réellement utilisée pour les buffers et caches.
Juste une note pour signaler que [-/+ buffers/cache].free = mem.free + mem.shared + mem.buffer + mem.cached.
Top: Liste des processus
La commande top affiche quelques informations utiles ainsi qu'une liste des processus trié par ordre de consommation cpu.
Si top permet de garder un oeil sur les processus les plus gourmants et permet l'identification des processus qui freine le bon fonctionnement du système, le rafraichissement constant de top (toutes les 3 à 5 sec) le rend aussi peu utilise lorsque l'on désire espionner un processus particulier.
En effet, la position d'un processus dans la liste varie constamment avec fonction de sa consommation cpu. C'est assez agacant.
Voici le résultat d'une commande top.
Attention: Il est cependant possible d'indiquer précisément le ou les processes à suivre (top -p pid1,pid2,...)
top - 11:37:01 up 3 days, 21:11, 2 users, load average: 0.34, 0.24, 0.23 Tasks: 182 total, 3 running, 179 sleeping, 0 stopped, 0 zombie Cpu(s): 12.6%us, 1.1%sy, 0.0%ni, 86.2%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 2569208k total, 1451288k used, 1117920k free, 157804k buffers Swap: 12286972k total, 0k used, 12286972k free, 729628k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9980 domeu 20 0 400m 115m 28m S 27 4.6 9:05.54 firefox-bin 1309 root 20 0 94356 74m 18m R 24 3.0 37:01.50 Xorg 1706 domeu 20 0 69148 46m 14m S 3 1.9 7:47.29 compiz 9997 domeu 20 0 134m 31m 14m S 3 1.2 1:42.08 plugin-containe 10079 domeu 20 0 93140 13m 10m S 3 0.6 0:00.84 gnome-terminal 1160 root 20 0 19292 4356 3572 S 0 0.2 0:06.87 NetworkManager 9498 root 20 0 0 0 0 R 0 0.0 0:00.92 kondemand/2 10322 domeu 20 0 2620 1156 840 R 0 0.0 0:00.02 top 1 root 20 0 2864 1700 1224 S 0 0.1 0:00.86 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0 0.0 0:04.54 ksoftirqd/0 4 root RT 0 0 0 0 S 0 0.0 0:00.65 migration/0 5 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0 15 root 20 0 0 0 0 S 0 0.0 0:05.05 events/0 19 root 20 0 0 0 0 S 0 0.0 0:00.00 cpuset
L'entête mentionne:
- La date et l'heure mais aussi "uptime" (cfr: up)
- La charge moyenne (average load)
- L'usage de la mémoire (y compris swap)
- L'usage CPU détaillé
- us : User
- sy : system
- ni : nice
- id : idle
- wa : iowait
- hi : H/w interrupt requests
- si : S/w interrupt requests
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9980 domeu 20 0 400m 115m 28m S 27 4.6 9:05.54 firefox-bin
pid - identification du processus
pr - la priorité attribuée par l'OS. Cette valeur dépend de la valeur de "nice" et d'autres paramètres. plus le chiffre est grand et moins le processus est prioritaire.
ni - la priorité donnée par l'utilisateur (-20 la plus haute, 20 la plus basse).
virt - la mémoire vituelle utilisée par le processus (mem processus + data processus + bibliothèques partagées utilisées + swap)
res - la quantité de ressource utilisé par le processus (mem processus + data processus)
shr - la mémoire partagée utilisée par le processus.
%cpu - évident
%mem - pourcentage de la mémoire physique utilisée par le processus.
time - temps cumulé durant lequel le processus a été actif.
command - la commande qui à lancé le processus
ps: Liste des processus
Une autre commande bien utile est ps, cette dernière permet de tirer une liste des procesus en cours d'exécution.
Les variantes les plus connues sont:
- ps -ef
- ps -efl
- ps aux
La commande ps accepte de nombreux arguments bien documenté dans les pages du manuel.
(voir "man ps")
ps -ef
Permet de tirer une liste des processus en cours d'exécution.
Dans son utilisation la plus courante, ps -ef sert a trouver le pid d'un processus, voire même s'il fonctionne.
A titre d'exemple, pour savoir sur firefox est en cours de fonctionnement (et quel pid) on utilisera la commande suivante:
ps -ef | grep firefox
voici un extrait de l'outpup affiché par ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Mar10 ? 00:00:00 /sbin/init root 2 0 0 Mar10 ? 00:00:00 [kthreadd] root 3 2 0 Mar10 ? 00:00:06 [ksoftirqd/0]uid - utilisateur ayant lancé le processus
pid - identification du processus
ppid - processus parent.
c - valeur entière indiquant le %cpu utilisé.
stime - Start Time, date et heure du lancement du processus
tty - terminal ayant lancé la commande (pas relevant dans un environnement graphique).
time - Cumul des temps d'exécutions du processus
cmd - la commande ayant lancé le processus.
ps -efL
Affiche le même contenu que la commande ps -ef mais ajoute des informations concernant les threads.
UID PID PPID LWP C NLWP STIME TTY TIME CMD root 1 0 1 0 1 Mar10 ? 00:00:00 /sbin/init root 2 0 2 0 1 Mar10 ? 00:00:00 [kthreadd] root 3 2 3 0 1 Mar10 ? 00:00:11 [ksoftirqd/0] root 4 2 4 0 1 Mar10 ? 00:00:01 [migration/0] root 5 2 5 0 1 Mar10 ? 00:00:00 [watchdog/0] root 15 2 15 0 1 Mar10 ? 00:00:11 [events/0]LWP - Identification du thread.
NLWP - Nombre de thread du processus.
ps aux
Cette commande permet d'obtenir un affichage beaucoup plus proche de la commande top.Avec ps aux, il sera possible de connaître le %cpu et %mem mais aussi les consommations en ressource.
xxx@yyy:~$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 2864 1700 ? Ss Mar10 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S Mar10 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Mar10 0:11 [ksoftirqd/0]VSZ - Virtual memory size, correspond a la colonne virt de la commande top. (mem processus + data processus + bibliothèques partagées utilisées + swap)
RSS - Resident Set Size, mémoire utilisée par le processus et ses données. Correspond à la colonne res de la commande top.
kill: terminer un processus
La commande kill permet d'envoyer le signal SIGTERM (fin de processus) à un processus particulier identifié par son pid.
Si le processus ne semble pas répondre, il est possible d'utiliser l'option -9 (KILL) dans la commande kill, cela terminera le processus de façon expéditive.
Voici un exemple terminant/expédiant le processus 253.
kill -9 253
Cet autre exemple demandant la fin d'exécution (gracefully) des processus 457 et 1099kill 457 1099
Dans les entrailles des processus
Dans le monde Unix, tout est représenté sous forme de fichier.
Ainsi, les processus en cours d'exécution se conforme à cette règle et font également partie du système de fichier.
Ainsi, en explorant le répertoire /proc, l'on se retrouve a explorer les processus en court d'éxécution.
La commande
ls -l /proc
affichera un répertoire par processus actif, le nom du répertoire étant le pid du processus (que l'on peu identifier à l'aide de ps -ef) et quelques autres fichiers et répertoires aux noms plus explicites.Vous pouvez obtenir plus d'information sur /proc dans les manuels à l'aide de la commande.
man 5 proc
/proc/cpuinfo
Fournit des informations relatives à la configuration cpu de la machine.
cat /proc/cpuinfo
/proc/meminfo
Fournit des informations relatives à la mémoire du système.
Si toutes informations ne sont pas utiles, certaines peuvent se montrer pertinente.
xxx@yyy:~$ cat /proc/meminfo MemTotal: 2569208 kB MemFree: 1090812 kB Buffers: 162756 kB Cached: 740640 kB SwapCached: 0 kB ...
/proc/PID
Un répertoire processus (identifier par la pid) contient une foule d'information.
En voici un exemple:
xxx@yyy:~$ ps -ef | grep firefox domeu 9972 1 0 11:00 ? 00:00:00 /bin/sh /usr/lib/firefox-3.6.15/firefox xxx@yyy:~$ ls -l /proc/9972 dr-xr-xr-x 2 domeu domeu 0 2011-03-14 11:08 attr -r-------- 1 domeu domeu 0 2011-03-14 13:53 auxv -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cgroup --w------- 1 domeu domeu 0 2011-03-14 13:53 clear_refs -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 cmdline -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 comm -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 coredump_filter -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 cpuset lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 cwd -> /home/domeu -r-------- 1 domeu domeu 0 2011-03-14 13:53 environ lrwxrwxrwx 1 domeu domeu 0 2011-03-14 11:22 exe -> /bin/dash dr-x------ 2 domeu domeu 0 2011-03-14 11:00 fd dr-x------ 2 domeu domeu 0 2011-03-14 13:53 fdinfo -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 io -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 latency -r-------- 1 domeu domeu 0 2011-03-14 13:53 limits -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 loginuid -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 maps -rw------- 1 domeu domeu 0 2011-03-14 13:53 mem -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mountinfo -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 mounts -r-------- 1 domeu domeu 0 2011-03-14 13:53 mountstats dr-xr-xr-x 5 domeu domeu 0 2011-03-14 13:53 net -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_adj -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 oom_score -r-------- 1 domeu domeu 0 2011-03-14 13:53 pagemap -r-------- 1 domeu domeu 0 2011-03-14 13:53 personality lrwxrwxrwx 1 domeu domeu 0 2011-03-14 13:53 root -> / -rw-r--r-- 1 domeu domeu 0 2011-03-14 13:53 sched -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 schedstat -r--r--r-- 1 domeu domeu 0 2011-03-14 13:53 sessionid -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 smaps -r-------- 1 domeu domeu 0 2011-03-14 13:53 stack -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 stat -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 statm -r--r--r-- 1 domeu domeu 0 2011-03-14 11:00 status -r-------- 1 domeu domeu 0 2011-03-14 13:53 syscall dr-xr-xr-x 3 domeu domeu 0 2011-03-14 13:53 task -r--r--r-- 1 domeu domeu 0 2011-03-14 11:08 wchaOn y retrouve les informations suivantes:
- cmdline - fichier contenant la ligne de commande.
- cwd - lien symbolique vers le répertoire courant du processus.
- environ - fichier contenant une copie des variables d'envrionnements liées au processus.
- exe - lien symbolique vers l'exécutable
- fd - file directory, répertoire contenant un liste des fichiers et sockets ouverts par le processus
xxx@yyy:/proc/9972$ ls -l fd total 0 lr-x------ 1 domeu domeu 64 2011-03-14 11:00 0 -> /dev/null lrwx------ 1 domeu domeu 64 2011-03-14 11:00 1 -> /home/domeu/.xsession-errors lrwx------ 1 domeu domeu 64 2011-03-14 11:00 10 -> /usr/lib/firefox-3.6.15/firefox lrwx------ 1 domeu domeu 64 2011-03-14 11:00 2 -> /home/domeu/.xsession-errors
- root - lien vers le répertoire root du processus (habituellement /).
Il faut savoir qu'il est possible d'utiliser un root customisé en utilisant chroot. Cela permet de restreindre l'accès au système de fichier ou d'utiliser un sous répertoire pour recréer le système de fichier, c'est très utile pour recréer un système minimaliste sans toucher au système de fichier, cette option est fort utilisée pour tester la compilation et l'installation de package sans risque pour le système.
Pour les curieux, voir le liens http://doc.fedora-fr.org/wiki/Utilisation_de_chroot
- Status - ce fichier affiche différentes informations relatif au fonctionnement du processus, y compris l'usage de la mémoire.
xxx@yyy:/proc/9972$ more status Name: firefox State: S (sleeping) Tgid: 9972 Pid: 9972 PPid: 1 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 FDSize: 256 Groups: 4 20 24 46 111 119 122 1000 VmPeak: 1896 kB VmSize: 1896 kB VmLck: 0 kB VmHWM: 508 kB VmRSS: 508 kB VmData: 168 kB VmStk: 136 kB VmExe: 80 kB VmLib: 1484 kB VmPTE: 28 kB VmSwap: 0 kB Threads: 1 SigQ: 0/16382 SigPnd: 0000000000000000 ...
Inutile de présenter PID, PPID, Name et State.
VmSize - mémoire totale utilisée. VmLib + VmExe + VmData + VmStk.
VmLock - mémoire vérouillée (évite qu'elle passe en swap).
VmRss - mémoire Resident Set Size (mem processus + mem data + mem stack).
VmData - mémoire virtuelle utilisée par la heap (stockage des données)
VmStk - mémoire utilisé pour la stack
VmExe - mémoire utilisée par l'executable et le librairie liées statiquement.
VmLib - Mémoire virtuelle utilisée par les librairies chargées en cours d'exécution.
VmData - mémoire allouée aux données
VmSwap - mémoire en swap
- Stat - version condensée de Status utilisé par la commande ps. le format produit par une instruction C printf est décrit dans le manuel d'utilisation (man 5 proc).
Aucun commentaire:
Enregistrer un commentaire