procfs
Sur les systèmes du type Unix, procfs (process file system, système de fichiers processus en anglais) est un pseudo-système de fichiers (pseudo car dynamiquement généré au démarrage[1]) utilisé pour accéder aux informations du noyau sur les processus. Le système de fichiers est souvent monté sur le répertoire /proc
.
Puisque /proc
n'est pas une arborescence réelle, il ne consomme aucun espace disque mais seulement une quantité limitée de mémoire vive. Cela aboutit à un paradoxe apparent : un fichier non vide a une taille affichée de 0 (avec ls).
procfs est supporté sur les systèmes suivants:
- Solaris
- BSD
- Linux, qui étend le concept au-delà des processus : entre autres, description détaillée des composants matériels, du réseau...etc
- IBM AIX (qui utilise l'implémentation de Linux pour une meilleure compatibilité)
- QNX, (Unix temps réel)
Historique
modifierUnix version 8
modifierLa version de /proc dans la version 8 d'Unix (en) a été mise en œuvre par Tom J. Killian, qui présenta un article intitulé Processes as Files (processus représentés comme des fichiers) à USENIX en . Cette première version était conçue pour remplacer l'appel système ptrace utilisé pour tracer les processus.
SVR4
modifierRoger Faulkner et Ron Gomes portèrent /proc sur SVR4, et publièrent un article appelé The Process File System and Process Model in UNIX System V à USENIX en . Cette version de /proc
était utilisée pour assurer l'équivalent de la commande ps, mais les fichiers n'étaient accessibles que par les fonctions read()
, write()
, et ioctl()
.
Plan 9
modifierPlan 9 implémente aussi un système de fichiers de processus, mais va plus loin qu'Unix version 8 : dans la version précédente, il y avait un seul fichier par processus, alors que, dans la nouvelle version, chaque processus a plusieurs fichiers associés (chaque fichier correspondant à une fonction).
4.4 BSD
modifierBSD 4.4 utilise un clone du procsys de Plan 9.
Solaris
modifierDe même, solaris utilise un clone du procsys de Plan 9.
Linux
modifierLe /proc de linux est un dérivé du procsys de Plan 9.
- Il y a un répertoire pour chaque processus en cours (y compris les processus noyau), le nom de ce processus est le nombre correspondant au PID (Identifiant de processus) (exemple : /proc/1 pour init ou systemd).
/proc/PID/cwd
/proc/PID/exe
/proc/PID/root
/proc/PID/status
/proc/PID/task
- Selon le type d'alimentation, il y aura soit un répertoire ACPI (sur les PC récents), soit un répertoire APM (sur les PC anciens)
/proc/bus
pour décrire les bus informatiques :/proc/cmdline
/proc/cpuinfo
/proc/crypto
/proc/devices
/proc/diskstats
/proc/filesystems
/proc/interrupts
(voir Interruption (informatique))/proc/kcore
/proc/meminfo
/proc/modules
/proc/mounts
/proc/net
/proc/partitions
/proc/scsi
/proc/slabinfo
/proc/swaps
/proc/sysvipc
/proc/tty
/proc/uptime
/proc/version
/proc/version_signature
- Quelques commandes utilisant /proc :
ps aux
: affiche l'état des processus en cours. Cette commande exploite les informations présentes dans/proc/[pid]/stat
.uname -a
: affiche des informations sur le système : le type de machines, le nom d'hôte de la machine sur le réseau, le numéro de version du système d'exploitation et le nom du système d'exploitation. Elle utilise le/proc/version
et le/proc/sys/kernel/version
swapon -s
: affiche le résumé par périphérique de l'utilisation de la pagination sur disque. Elle utilise/proc/swaps
.free
: affiche les quantités totales de mémoire et de zone de swap libres et utilisées dans le système. Utilise/proc/meminfo
.dmesg
: affiche le tampon des messages du noyau. Elle utilise le/proc/kmsg
.uptime
: indique depuis quand le système fonctionne. Elle utilise/proc/loadavg
.lspci
: utilitaire permettant d'afficher des informations sur les bus PCI du système ainsi que sur les périphériques qui y sont connectés. Elle utilise/proc/bus/pci/devices
.lsmod
: affiche la liste des modules du noyau chargés en mémoire. Elle emploie/proc/modules
.mount
affiche les points de montage. Elle emploie/proc/mounts
.sysctl
: permet de lire et modifier les paramètres du noyau.pwdx
(+ le PID) : permet de connaître le répertoire courant de travail du processus indiqué par son PID. Elle utilise/proc/[pid]/cwd
qui est un lien.pgrep
: recherche des processus en fonction de leur nom et d'autres propriétés. Elle utilise/proc/[pid]
.
/proc/cpuinfo
modifier/proc/cpuinfo
est un pseudo-fichier contenant les informations sur le(s) processeur(s) du système.
Dans le cas d'un système x86, il liste chaque cœur de chaque processeur ; il contient les lignes suivantes :
processor
correspond à l'identifiant utilisé par le système pour identifier le processeur logiquevendor_id
est une chaine de caractères utilisée pour identifier le fabricant du processeur (soit AuthenticAMD ou GenuineIntel)cpu_family
est un nombre donnant la version majeure du processeur :- Intel - Intel affirme que
cpu_family
n'est qu'une indication sur le processus de fabrication, pas sur la version du processeur[2].
- Intel - Intel affirme que
CPU family | Model | Stepping | Cache size | Model name | Description |
---|---|---|---|---|---|
3 | 0 | 0 | x | ? | Intel 386 DX |
3 | 2 | 0 | x | ? | Intel386 SX / CX / EX |
3 | 4 | 0/1 | x | ? | Intel386 SL |
4 | 0/1 | x | x | ? | Intel 486 DX |
4 | 2 | x | x | ? | Intel486 SX |
4 | 3 | x | x | ? | Intel487 / DX2 / DX2 OverDrive |
4 | 4 | x | x | ? | Intel486 SL |
4 | 5 | x | x | ? | IntelSX2 |
4 | 8 | x | x | ? | IntelDX4 / DX4 Overdrive |
5 | 1 | x | x | ? | Pentium/Pentium OverDrive processors (60,66) |
5 | 2 | x | x | ? | Pentium/Pentium OverDrive processors (75,90,100,120,133,150,166,200) |
5 | 3 | x | x | ? | Pentium OverDrive for 486 based systems |
5 | 4 | x | x | ? | Pentium processor with MMX technology (166,200) & OverDrive with MMX for Pentium (75,90,100,120,133) |
6 | 1 | x | x | ? | Pentium Pro |
6 | 3 | x | x | ? | Pentium II, model 3 and Intel Pentium II OverDrive processor |
6 | 5 | x | 0 | ? | Intel Celeron model 5 |
6 | 5 | x | 1/2Mb | ? | Pentium II Xeon, model 5 |
6 | 5 | x | otherwise | ? | Pentium II, model 5, Pentium II Xeon with L2 Cache 512 kB |
6 | 6 | x | x | ? | Celeron model 6 |
6 | 7 | x | 1/2Mb | ? | Pentium III Xeon, model 7 |
6 | 7 | x | otherwise | ? | Pentium III, model 7 or Pentium III Xeon, model 7 with L2 Cache 512 kB |
6 | 8 | x | x | ? | Pentium III, model 8, Pentium III Xeon, model 8 and Intel Celeron model 8 |
6 | 9 | x | x | ? | Pentium M processor and Intel Celeron model 9 |
6 | 10 | x | x | ? | Pentium III Xeon, model A |
6 | 11 | x | x | ? | Pentium III Xeon, model B |
6 | 13 | x | x | ? | Intel Pentium M processor, Intel Celeron M model D. All processors are manufactures using 90 nm process |
6 | 14 | x | x | ? | Intel Core Duo processor, Intel Core Solo model E. All processors are manufactures using 65 nm process |
6 | 15 | x | x | ? | Intel Core 2 Duo processor model F, Xeon 51xx and 53xx. All processors are manufactures using 65 nm process |
15 | 0 | x | x | ? | Pentium 4 and Intel Xeon processor . All processors are model 0 and manufactured using the 0.18 micrometre process |
15 | 1 | x | x | ? | Pentium 4, Xeon processor, Intel Xeon processor MP and Intel Celeron. All processors are model 1 and manufactured using the 0.18 micrometre process |
15 | 2 | x | x | ? | Pentium 4, Mobile Intel P4 - M, Xeon processor, Intel Xeon processor MP, Intel Celeron and Mobile Intel Celeron. All processors are model 2 and manufactured using the 0.13 micrometre process |
15 | 3 | x | x | ? | Pentium 4, Xeon processor, Intel Celeron D. All processors are model 3 and manufactured using the 90 nm process |
15 | 4 | x | x | ? | Pentium 4, P4 Extreme edition, Pentium D, Xeon processor, Xeon MP and Celeton D. All processors are model 4 and manufactured using the 90 nm process |
15 | 6 | x | x | ? | Pentium 4, Pentium Extreme edition, Pentium D, Xeon processor, Xeon MP and Celeron D. All processors are model 6 and manufactured using the 65 nm process |
Voici l'exemple d'un /proc/cpuinfo
sur une vm linux tournant sur z/VM (en):
vendor_id : IBM/S390 # processors : 1 bogomips per cpu: 7668.00 features : esan3 zarch stfle msa ldisp eimm dfp processor 0: version = FF, identification = 080C92, machine = 2097
/proc/kcore
modifier/proc/kcore
est un pseudo fichier représentant la mémoire physique du système sous forme de fichier ELF core. À l'aide de ce pseudo-fichier et d'un binaire du noyau non stripé (/usr/src/linux/vmlinux
), gdb peut servir à inspecter l'état de n'importe quelle structure de données du noyau.
Contrairement à la plupart des autres fichiers de /proc
, la commande ls
indique une taille non nulle pour ce fichier. En fait, la taille de ce fichier est la taille de la mémoire vive physique plus 4 Ko. Sur les noyaux 64 bits, la taille de ce fichier est de 128 téraoctets, qui est la taille maximum adressable par une telle architecture.
De nombreux débutants sont piégés par la taille de ce pseudo-fichier et cherchent à l'éliminer pour gagner de la place disque.
/proc/meminfo
modifier/proc/meminfo
est un pseudo-fichier de l'implémentation de procfs
dans les récents noyaux linux. Il est utilisé pour fournir les informations sur l'état courant de la mémoire du système, y compris sur la mémoire virtuelle et le cache système. C'est la principale manière d'accéder à ces informations pour les programmes de l'espace utilisateur, et est celle utilisée par de nombreux utilitaires de monitorage du système.
Notes et références
modifier- (en) Red Hat, Inc. Tips & Tricks Featured Article: /proc/meminfo Explained, mars 2003.
- (en) A MacFUSE-Based Process File System for Mac OS X
- (en) Access the Linux kernel using the Procfs An IBM developerWorks article by M. Tim Jones
Voir aussi
modifierArticles connexes
modifierRéférences externes
modifier- (en) Un système de fichiers processus pour Mac OS X reposant sur MacFUSE
- (fr) /proc et /sys - O'Reilly, Olivier Daudel,