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/127 $ ls -l total 0 -r--r--r-- 1 root root 0 Dec 14 19:53 cmdline lrwx------ 1 root root 0 Dec 14 19:53 cwd -> // -r-------- 1 root root 0 Dec 14 19:53 environ lrwx------ 1 root root 0 Dec 14 19:53 exe -> /usr/sbin/apmd* dr-x------ 2 root root 0 Dec 14 19:53 fd/ pr--r--r-- 1 root root 0 Dec 14 19:53 maps| -rw------- 1 root root 0 Dec 14 19:53 mem lrwx------ 1 root root 0 Dec 14 19:53 root -> // -r--r--r-- 1 root root 0 Dec 14 19:53 stat -r--r--r-- 1 root root 0 Dec 14 19:53 statm -r--r--r-- 1 root root 0 Dec 14 19:53 status $
Chaque répertoire contient les mêmes entrées. Voici une brève description de quelques-unes de ces entrées :
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.
cwd
: ce lien
symbolique pointe vers le répertoire de travail en cours
(Current Working Directory) du
processus.
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.
exe
: c'est
un lien symbolique pointant sur le fichier exécutable
correspondant au processus en cours d'exécution.
fd
: ce
sous-répertoire contient la liste de tous les descripteurs de
fichiers actuellement ouverts par le processus. Voyez
ci-dessous.
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).
root
: c'est un lien
symbolique qui pointe vers le répertoire racine utilisé par le
processus. Habituellement, ce sera /
, mais
voyezchroot(2).
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, par
exemple le processus 127, nous obtenons
ceci :
$ ls -l /proc/127/fd total 0 lrwx------ 1 root root 64 Dec 16 22:04 0 -> /dev/console l-wx------ 1 root root 64 Dec 16 22:04 1 -> pipe:[128] l-wx------ 1 root root 64 Dec 16 22:04 2 -> pipe:[129] l-wx------ 1 root root 64 Dec 16 22:04 21 -> pipe:[130] lrwx------ 1 root root 64 Dec 16 22:04 3 -> /dev/apm_bios lr-x------ 1 root root 64 Dec 16 22:04 7 -> pipe:[130] lrwx------ 1 root root 64 Dec 16 22:04 9 -> /dev/console $
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.[31]. 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.
[31] 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.