1. Renseignements sur les processus

Si vous listez le contenu du répertoire /proc, vous verrez beaucoup de répertoires dont le nom est un nombre. Ce sont les répertoires contenant les informations sur tous les processus fonctionnant à un instant donné sur le système :

$ ls -d /proc/[0-9]*
/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/
/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/
/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/
/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/
/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/
/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/
/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/
/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

Notez qu'en tant qu'utilisateur, vous ne pouvez (logiquement) qu'afficher les informations relatives à vos propres processus. Donc, connectons-nous en tant que root et voyons quelle information devient disponible depuis le processus 1, qui est le processus init, responsable du démarrage de tous les autres processus :

$ su
Password:
# cd /proc/1
# ls -l
total 0
-r--------  1 root root 0 Aug 15 18:14 auxv
-r--r--r--  1 root root 0 Aug 15 18:14 cmdline
lrwxrwxrwx  1 root root 0 Aug 15 18:14 cwd -> //
-r--------  1 root root 0 Aug 15 18:14 environ
lrwxrwxrwx  1 root root 0 Aug 15 18:14 exe -> /sbin/init*
dr-x------  2 root root 0 Aug 15 18:14 fd/
-rw-r--r--  1 root root 0 Aug 15 18:14 loginuid
-r--r--r--  1 root root 0 Aug 15 18:14 maps
-rw-------  1 root root 0 Aug 15 18:14 mem
-r--r--r--  1 root root 0 Aug 15 18:14 mounts
-rw-r--r--  1 root root 0 Aug 15 18:14 oom_adj
-r--r--r--  1 root root 0 Aug 15 18:14 oom_score
lrwxrwxrwx  1 root root 0 Aug 15 18:14 root -> //
-rw-------  1 root root 0 Aug 15 18:14 seccomp
-r--r--r--  1 root root 0 Aug 15 18:14 stat
-r--r--r--  1 root root 0 Aug 15 18:14 statm
-r--r--r--  1 root root 0 Aug 15 18:14 status
dr-xr-xr-x  3 root root 0 Aug 15 18:14 task/
-r--r--r--  1 root root 0 Aug 15 18:14 wchan
#

Chaque répertoire contient les mêmes entrées. Voici une brève description de quelques-unes de ces entrées :

  1. cmdline : ce (pseudo) fichier contient l'intégralité de la ligne de commande utilisée pour invoquer le processus. Elle n'est pas formatée : il n'y a aucun espace entre le programme et ses arguments, ni de saut de ligne à la fin du fichier. Pour le rendre lisible, vous pouvez utiliser : perl -ple 's,\00, ,g' cmdline.

  2. cwd : ce lien symbolique pointe vers le répertoire de travail en cours (Current Working Directory) du processus.

  3. environ : ce fichier contient toutes les variables d'environnement pour le processus, sous la forme VARIABLE=valeur. De même que pour cmdline, la sortie n'est pas du tout formatée : pas de saut de ligne pour séparer les différentes variables, ni de saut de ligne à la fin non plus. Une solution pour le consulter : perl -ple 's,\00,\n,g' environ.

  4. exe : c'est un lien symbolique pointant sur le fichier exécutable correspondant au processus en cours d'exécution.

  5. fd : ce sous-répertoire contient la liste de tous les descripteurs de fichiers actuellement ouverts par le processus. Voyez ci-dessous.

  6. maps : lorsque vous affichez le contenu de ce tube nommé (avec cat par exemple), vous voyez toutes les parties de l'espace d'adressage du processus qui sont actuellement des projections en mémoire de fichiers. Les champs, de gauche à droite, sont : la plage d'adresses de la projection mémoire, les permissions associées à cette projection, le décalage depuis le début du fichier où commence la projection, les numéros majeur et mineur (en hexadécimal) du périphérique sur lequel le fichier projeté se trouve, le numéro d'inœud du fichier et enfin, le nom du fichier lui-même. Lorsque le périphérique est 0 et qu'il n'y a ni numéro d'inœud, ni nom de fichier, ce sont des projections anonymes. Voyez mmap(2).

  7. root : c'est un lien symbolique qui pointe vers le répertoire racine utilisé par le processus. Habituellement, ce sera /, mais voyezchroot(2).

  8. status : ce fichier contient diverses informations sur le processus : le nom de l'exécutable, son état actuel, son PID et son PPID, ses UID et GID réels et effectifs, son occupation mémoire, etc. Notez que les fichiers stat et statm sont désormais obsolètes. L'information qu'ils contenaient est synthétisée dans status

Si nous listons le contenu du répertoire fd pour un processus choisi au hasard, nous obtenons ceci :

# ls -l /proc/8141/fd/
total 4
lrwx------  1 pierre pierre 64 Aug  4 09:05 0 -> /dev/tty1
lrwx------  1 pierre pierre 64 Aug  4 09:05 1 -> /dev/tty1
lrwx------  1 pierre pierre 64 Aug  4 09:05 2 -> /dev/tty1
l-wx------  1 pierre pierre 64 Aug  4 09:05 3 -> /home/pierre/seti32/lock.sah
#

Ceci représente en fait la liste des descripteurs de fichiers ouverts par le processus. Chaque descripteur ouvert est matérialisé par un lien symbolique (dont le nom est le numéro du descripteur) : ce lien pointe vers le fichier ouvert par le biais de ce descripteur.[10]. Vous pouvez également remarquer les permissions des liens symboliques : c'est le seul endroit où elles ont un sens pour les liens symboliques, puisqu'elles sont ici le reflet des droits avec lesquels le fichier correspondant au descripteur a été ouvert.



[10] Si vous vous souvenez de ce que sont les descripteurs 0, 1 et 2, décrits dans la section Section 4, « Redirections et tubes », vous savez donc que le descripteur 0 est l'entrée standard ; le descripteur 1, la sortie standard et le descripteur 2, l'erreur standard.