Tutoriel de la commande Linux pmap pour les débutants (5 exemples)

La ligne de commande Linux propose de nombreux outilsqui t’aident à en savoir plus sur les processus qui sont actuellement actifs dans ton système. L’un de ces utilitaires est pmap, qui indique la carte mémoire des processus. Dans ce tutoriel, nous allons aborder les bases de pmap à l’aide d’exemples faciles à comprendre.

Mais avant cela, il est bon de mentionner que tous les exemples ici ont été testés sur une machine Ubuntu 20.04 LTS.

Commande pmap de Linux

La commande pmap de Linux te permet de voir la carte mémoire d’un ou de plusieurs processus. Voici sa syntaxe :

pmap [options] pid [...]

Et voici comment la page de manuel de l’outil l’explique :

The pmap command reports the memory map of a process or processes.

Voici quelques exemples sous forme de questions-réponses qui devraient te donner une idée encore plus précise du fonctionnement de la commande pmap.

Q1. Comment utiliser pmap ?

L’utilisation de base est simple. Exécute simplement la commande ‘pmap’ sans aucune option. Bien sûr, tu dois passer un PID de processus en entrée.

Par exemple, j’ai utilisé pmap de la manière suivante :

pmap 5146

Et voici une partie de la sortie qui a été produite :

5146:   gedit
000055bde4835000      8K r-x-- gedit
000055bde4a36000      4K r---- gedit
000055bde4a37000      4K rw--- gedit
000055bde5d32000  13944K rw---   [ anon ]
00007fc910000000    132K rw---   [ anon ]
00007fc910021000  65404K -----   [ anon ]
00007fc918000000    896K rw---   [ anon ]
00007fc9180e0000  64640K -----   [ anon ]
00007fc91c750000    204K r---- UbuntuMono-R.ttf
00007fc91c783000    644K r-x-- libaspell.so.15.2.0
00007fc91c824000   2048K ----- libaspell.so.15.2.0
00007fc91ca24000     20K r---- libaspell.so.15.2.0
00007fc91ca29000      4K rw--- libaspell.so.15.2.0
00007fc91ca2a000      8K r-x-- libenchant_aspell.so
00007fc91ca2c000   2044K ----- libenchant_aspell.so
00007fc91cc2b000      4K r---- libenchant_aspell.so
00007fc91cc2c000      4K rw--- libenchant_aspell.so
00007fc91cc2d000     44K r-x-- libenchant_hspell.so
00007fc91cc38000   2044K ----- libenchant_hspell.so
00007fc91ce37000      4K r---- libenchant_hspell.so
00007fc91ce38000     12K rw--- libenchant_hspell.so
00007fc91ce3b000    428K r-x-- libhunspell-1.6.so.0.0.1
00007fc91cea6000   2044K ----- libhunspell-1.6.so.0.0.1
00007fc91d0a5000      4K r---- libhunspell-1.6.so.0.0.1
00007fc91d0a6000     16K rw--- libhunspell-1.6.so.0.0.1
00007fc91d0aa000     16K r-x-- libenchant_myspell.so
00007fc91d0ae000   2048K ----- libenchant_myspell.so
00007fc91d2ae000      4K r---- libenchant_myspell.so
...
...
...

Donc voilà, la sortie t’indique d’abord le nom du processus et ensuite la carte mémoire.

Q2. Comment faire en sorte que pmap affiche la sortie étendue ?

Pour que pmap affiche la sortie au format étendu, utilise l’option de ligne de commande -x. Par exemple :

pmap -x 5146

Voici une partie de la sortie produite :

5146:   gedit
Address           Kbytes     RSS   Dirty Mode  Mapping
000055bde4835000       8       4       0 r-x-- gedit
000055bde4835000       0       0       0 r-x-- gedit
000055bde4a36000       4       4       4 r---- gedit
000055bde4a36000       0       0       0 r---- gedit
000055bde4a37000       4       4       4 rw--- gedit
000055bde4a37000       0       0       0 rw--- gedit
000055bde5d32000   13944   13692   13692 rw---   [ anon ]
000055bde5d32000       0       0       0 rw---   [ anon ]
00007fc910000000     132      44      44 rw---   [ anon ]
00007fc910000000       0       0       0 rw---   [ anon ]
00007fc910021000   65404       0       0 -----   [ anon ]
00007fc910021000       0       0       0 -----   [ anon ]
00007fc918000000     896     896     896 rw---   [ anon ]
00007fc918000000       0       0       0 rw---   [ anon ]
00007fc9180e0000   64640       0       0 -----   [ anon ]
00007fc9180e0000       0       0       0 -----   [ anon ]
00007fc91c750000     204     136       0 r---- UbuntuMono-R.ttf
00007fc91c750000       0       0       0 r---- UbuntuMono-R.ttf
00007fc91c783000     644     472       0 r-x-- libaspell.so.15.2.0
00007fc91c783000       0       0       0 r-x-- libaspell.so.15.2.0
00007fc91c824000    2048       0       0 ----- libaspell.so.15.2.0
00007fc91c824000       0       0       0 ----- libaspell.so.15.2.0
00007fc91ca24000      20      20      20 r---- libaspell.so.15.2.0
00007fc91ca24000       0       0       0 r---- libaspell.so.15.2.0
00007fc91ca29000       4       4       4 rw--- libaspell.so.15.2.0
00007fc91ca29000       0       0       0 rw--- libaspell.so.15.2.0
00007fc91ca2a000       8       8       0 r-x-- libenchant_aspell.so
00007fc91ca2a000       0       0       0 r-x-- libenchant_aspell.so
00007fc91ca2c000    2044       0       0 ----- libenchant_aspell.so
00007fc91ca2c000       0       0       0 ----- libenchant_aspell.so
00007fc91cc2b000       4       4       4 r---- libenchant_aspell.so
00007fc91cc2b000       0       0       0 r---- libenchant_aspell.so
...
...
...

Note que si tu as besoin d’encore plus de détails, tu peux utiliser l’option de ligne de commande -X.

Q3. Comment faire pour que pmap affiche le format du périphérique dans la sortie ?

Tu peux le faire en utilisant l’option de ligne de commande -d. Par exemple :

pmap -d 5146

Et voici une partie de la sortie produite :

5146:   gedit
Address           Kbytes Mode  Offset           Device    Mapping
000055bde4835000       8 r-x-- 0000000000000000 008:00008 gedit
000055bde4a36000       4 r---- 0000000000001000 008:00008 gedit
000055bde4a37000       4 rw--- 0000000000002000 008:00008 gedit
000055bde5d32000   13944 rw--- 0000000000000000 000:00000   [ anon ]
00007fc910000000     132 rw--- 0000000000000000 000:00000   [ anon ]
00007fc910021000   65404 ----- 0000000000000000 000:00000   [ anon ]
00007fc918000000     896 rw--- 0000000000000000 000:00000   [ anon ]
00007fc9180e0000   64640 ----- 0000000000000000 000:00000   [ anon ]
00007fc91c750000     204 r---- 0000000000000000 008:00008 UbuntuMono-R.ttf
00007fc91c783000     644 r-x-- 0000000000000000 008:00008 libaspell.so.15.2.0
00007fc91c824000    2048 ----- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca24000      20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca29000       4 rw--- 00000000000a6000 008:00008 libaspell.so.15.2.0
00007fc91ca2a000       8 r-x-- 0000000000000000 008:00008 libenchant_aspell.so
00007fc91ca2c000    2044 ----- 0000000000002000 008:00008 libenchant_aspell.so
00007fc91cc2b000       4 r---- 0000000000001000 008:00008 libenchant_aspell.so
00007fc91cc2c000       4 rw--- 0000000000002000 008:00008 libenchant_aspell.so
00007fc91cc2d000      44 r-x-- 0000000000000000 008:00008 libenchant_hspell.so
00007fc91cc38000    2044 ----- 000000000000b000 008:00008 libenchant_hspell.so
00007fc91ce37000       4 r---- 000000000000a000 008:00008 libenchant_hspell.so
00007fc91ce38000      12 rw--- 000000000000b000 008:00008 libenchant_hspell.so
...
...
...

Tu peux donc voir qu’une nouvelle colonne ‘device’ a été ajoutée dans la sortie.

Q4. Comment dépouiller la sortie de pmap des en-têtes et des pieds de page ?

Si tu ne veux pas voir des choses comme les noms de colonnes dans la sortie de pmap, tu peux utiliser l’option de ligne de commande -q.

Par exemple :

pmap -q -d 5146

Voici le résultat :

5146:   gedit
000055bde4835000       8 r-x-- 0000000000000000 008:00008 gedit
000055bde4a36000       4 r---- 0000000000001000 008:00008 gedit
000055bde4a37000       4 rw--- 0000000000002000 008:00008 gedit
000055bde5d32000   13944 rw--- 0000000000000000 000:00000   [ anon ]
00007fc910000000     132 rw--- 0000000000000000 000:00000   [ anon ]
00007fc910021000   65404 ----- 0000000000000000 000:00000   [ anon ]
00007fc918000000     896 rw--- 0000000000000000 000:00000   [ anon ]
00007fc9180e0000   64640 ----- 0000000000000000 000:00000   [ anon ]
00007fc91c750000     204 r---- 0000000000000000 008:00008 UbuntuMono-R.ttf
00007fc91c783000     644 r-x-- 0000000000000000 008:00008 libaspell.so.15.2.0
00007fc91c824000    2048 ----- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca24000      20 r---- 00000000000a1000 008:00008 libaspell.so.15.2.0
00007fc91ca29000       4 rw--- 00000000000a6000 008:00008 libaspell.so.15.2.0
00007fc91ca2a000       8 r-x-- 0000000000000000 008:00008 libenchant_aspell.so
00007fc91ca2c000    2044 ----- 0000000000002000 008:00008 libenchant_aspell.so
00007fc91cc2b000       4 r---- 0000000000001000 008:00008 libenchant_aspell.so
00007fc91cc2c000       4 rw--- 0000000000002000 008:00008 libenchant_aspell.so
00007fc91cc2d000      44 r-x-- 0000000000000000 008:00008 libenchant_hspell.so
00007fc91cc38000    2044 ----- 000000000000b000 008:00008 libenchant_hspell.so
00007fc91ce37000       4 r---- 000000000000a000 008:00008 libenchant_hspell.so
00007fc91ce38000      12 rw--- 000000000000b000 008:00008 libenchant_hspell.so

Tu peux donc voir que l’en-tête a été supprimé de la sortie.

Q5. Comment faire pour que pmap affiche les chemins complets dans la sortie ?

Si tu veux que pmap affiche le chemin complet des fichiers dans la colonne de mappage, tu peux utiliser l’option de ligne de commande -p.

Par exemple :

pmap -p 5146

Et voici la sortie produite par cette commande :

5146:   gedit
000055bde4835000      8K r-x-- /usr/bin/gedit
000055bde4a36000      4K r---- /usr/bin/gedit
000055bde4a37000      4K rw--- /usr/bin/gedit
000055bde5d32000  13944K rw---   [ anon ]
00007fc910000000    132K rw---   [ anon ]
00007fc910021000  65404K -----   [ anon ]
00007fc918000000    896K rw---   [ anon ]
00007fc9180e0000  64640K -----   [ anon ]
00007fc91c750000    204K r---- /usr/share/fonts/truetype/ubuntu/UbuntuMono-R.ttf
00007fc91c783000    644K r-x-- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91c824000   2048K ----- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91ca24000     20K r---- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91ca29000      4K rw--- /usr/lib/x86_64-linux-gnu/libaspell.so.15.2.0
00007fc91ca2a000      8K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91ca2c000   2044K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91cc2b000      4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91cc2c000      4K rw--- /usr/lib/x86_64-linux-gnu/enchant/libenchant_aspell.so
00007fc91cc2d000     44K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91cc38000   2044K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91ce37000      4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91ce38000     12K rw--- /usr/lib/x86_64-linux-gnu/enchant/libenchant_hspell.so
00007fc91ce3b000    428K r-x-- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91cea6000   2044K ----- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0a5000      4K r---- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0a6000     16K rw--- /usr/lib/x86_64-linux-gnu/libhunspell-1.6.so.0.0.1
00007fc91d0aa000     16K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d0ae000   2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2ae000      4K r---- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2af000      4K rw--- /usr/lib/x86_64-linux-gnu/enchant/libenchant_myspell.so
00007fc91d2b0000     44K r-x-- /usr/lib/x86_64-linux-gnu/enchant/libenchant_ispell.so
00007fc91d2bb000   2048K ----- /usr/lib/x86_64-linux-gnu/enchant/libenchant_ispell.so

Tu peux donc voir que les noms de fichiers avec les chemins complets sont produits dans la sortie.

Conclusion

Si ton travail implique de traiter les cartes mémoire des processus, cet outil est fait pour toi. Dans ce tutoriel, nous avons décrit l’utilisation de base de cette commande. Une fois que tu auras mis en pratique tout ce dont nous avons parlé ici, rends-toi sur lapage man de l’outil pour en savoir plus.

Vous aimerez aussi...