Linux_proc - Kasimashi/Systemes-embarques GitHub Wiki

Le système de fichier /proc

Le système de fichier virtuel /proc permet d’accéder facilement aux paramètres du système et particulièrement à ceux du noyau.

Pour communiquer avec l’espace utilisateur, le noyau Linux utilise un concept emprunté à Unix System V : le système de fichier /proc. À la différence des systèmes de fichiers classiques qui sont associés à des périphériques réels, le système de fichier /proc est virtuel. Sa structure de système de fichier en fait une représentation facile pour manipuler des paramètres du noyau Linux. On peut en effet utiliser les commandes standards de manipulation des fichiers classiques, ainsi que la redirection des entrées/sorties très utilisée sous Linux. En particulier, la commande lsmod de lecture des modules chargés n’est en fait qu’un raccourci pour la visualisation du fichier virtuel /proc/modules :

└──╼ $cat /proc/modules
tun 61440 2 - Live 0x0000000000000000
snd_seq_dummy 16384 0 - Live 0x0000000000000000
snd_hrtimer 16384 1 - Live 0x0000000000000000
└──╼ $lsmod
Module                  Size  Used by
tun                    61440  2
snd_seq_dummy          16384  0
snd_hrtimer            16384  1

De même, on peut visualiser les paramètres standards du système comme la mémoire disponible au moyen de /proc/meminfo, la version du noyau avec /proc/version, le type de processeur utilisé avec /proc/cpuinfo, ou les systèmes de fichiers supportés par le noyau avec /proc/filesystems. Cette liste n’est, bien entendu, pas exhaustive car un pilote de périphérique peut ajouter dynamiquement des fichiers et répertoires à /proc lors du chargement du module associé.

De même, les valeurs numériques présentes dans /proc représentent les zones d’information des processus courant, chaque valeur correspondant au PID (Processus IDentifier) du processus en question. Ces sous-répertoires contiennent les informations propres au processus en question :

Le système de fichier /proc est également utilisable en écriture, ce qui permet de modifier dynamiquement le comportement du noyau Linux sans aucune compilation. Un exemple classique est la validation d’option comme par le transfert de paquets IP (IP forwarding). On peut connaître la valeur de l’option d’IP forwarding en faisant :

└──╼ $cat /proc/sys/net/ipv4/ip_forward
1

Le système retourne la valeur 1, ce qui signifie que l’IP forwarding est validé. On peut l’inhiber en faisant simplement :

──╼ $echo 0 > /proc/sys/net/ipv4/ip_forward

Exemple

Par exemple je suis actuellement en train d'executer sur ma machine un processus "pluma" : si je récupère son PID :

└──╼ $ps -aux | grep pluma
kasi      277006  0.0  0.7 413724 58128 ?        Sl   16:42   0:00 pluma /home/kasi/Desktop/Programme-de-Bases/C/Module Linux/glop.c

Ici le PID est 277006, je peux trouver dans /proc/277006 toutes les informations propre au processus :

└──╼ $ls -l /proc/277006
total 0
-r--r--r--  1 kasi root 0 févr. 21 17:15 arch_status
dr-xr-xr-x  2 kasi root 0 févr. 21 17:15 attr
-rw-r--r--  1 kasi root 0 févr. 21 17:15 autogroup
-r--------  1 kasi root 0 févr. 21 17:15 auxv
-r--r--r--  1 kasi root 0 févr. 21 17:15 cgroup
--w-------  1 kasi root 0 févr. 21 17:15 clear_refs
-r--r--r--  1 kasi root 0 févr. 21 16:42 cmdline
-rw-r--r--  1 kasi root 0 févr. 21 17:15 comm
-rw-r--r--  1 kasi root 0 févr. 21 17:15 coredump_filter
-r--r--r--  1 kasi root 0 févr. 21 17:15 cpu_resctrl_groups
-r--r--r--  1 kasi root 0 févr. 21 17:15 cpuset
lrwxrwxrwx  1 kasi root 0 févr. 21 17:15 cwd -> /home/kasi
-r--------  1 kasi root 0 févr. 21 17:15 environ
lrwxrwxrwx  1 kasi root 0 févr. 21 17:15 exe -> /usr/bin/pluma
(...)

Chaques fichier me donne une information sur l'état du processus ainsi : par exemple le fichier status me permet d'extraire l'état du processus :

└──╼ $cat /proc/277006/status
Name:	pluma
Umask:	0022
State:	S (sleeping)
Tgid:	277006
Ngid:	0
Pid:	277006
(...)