Ricerca nel sito web

Tutorial sui comandi Linux pmap per principianti (5 esempi)


Su questa pagina

  1. Comando Linux pmap
  2. D1. Come usare pmap?
  3. Q2. Come fare in modo che pmap mostri l'output esteso?
  4. Q3. Come rendere il formato del dispositivo pmap show in output?
  5. Q4. Come rimuovere l'output di pmap da intestazioni e piè di pagina?
  6. D5. Come fare in modo che pmap mostri i percorsi completi nell'output?
  7. Conclusione

La riga di comando di Linux offre molti strumenti che ti aiutano a saperne di più sui processi attualmente attivi nel tuo sistema. Una di queste utility è pmap, che riporta la mappa della memoria del processo. In questo tutorial, discuteremo le basi di pmap utilizzando alcuni esempi di facile comprensione.

Ma prima di farlo, vale la pena menzionare che tutti gli esempi qui sono stati testati su una macchina Ubuntu 22.04 LTS.

Comando pmap di Linux

Il comando pmap in Linux ti consente di vedere la mappa della memoria di uno o più di un processo. Di seguito la sua sintassi:

pmap [options] pid [...]

Ed ecco come lo spiega la pagina man degli strumenti:

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

Di seguito sono riportati alcuni esempi in stile Q&A che dovrebbero darti un'idea ancora migliore su come funziona il comando pmap.

Q1. Come usare pmap?

L'utilizzo di base è semplice. Basta eseguire il comando pmap senza alcuna opzione. Ovviamente, devi passare un PID di processo come input.

Ad esempio, ho usato pmap nel modo seguente:

pmap 5146

Ed ecco una parte dell'output che è stato prodotto:

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
...
...
...

Quindi ecco fatto, l'output mostra prima il nome del processo e poi lo segue con la mappa della memoria.

D2. Come fare in modo che pmap mostri l'output esteso?

Per fare in modo che pmap mostri l'output in formato esteso, usa l'opzione della riga di comando -x. Per esempio:

pmap -x 5146

Di seguito una parte dell'output prodotto:

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
...
...
...

Tieni presente che se hai bisogno di ulteriori dettagli, puoi utilizzare l'opzione della riga di comando -X.

D3. Come rendere il formato del dispositivo pmap show in output?

Questo può essere fatto usando l'opzione della riga di comando -d. Per esempio:

pmap -d 5146

Ed ecco una parte dell'output prodotto:

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
...
...
...

Quindi puoi vedere che un nuovo dispositivo di colonna è stato aggiunto nell'output.

D4. Come rimuovere l'output di pmap da intestazioni e piè di pagina?

Se non vuoi vedere cose come i nomi delle colonne nell'output di pmap, puoi usare l'opzione della riga di comando -q.

Per esempio:

pmap -q -d 5146

Di seguito è stato l'output:

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

Quindi puoi vedere che l'intestazione è stata rimossa dall'output.

Q5. Come fare in modo che pmap mostri i percorsi completi nell'output?

Nel caso in cui si desideri che pmap mostri il percorso completo dei file nella colonna di mappatura, è possibile utilizzare l'opzione della riga di comando -p.

Per esempio:

pmap -p 5146

Ed ecco l'output prodotto da questo comando:

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

Quindi puoi vedere che i nomi di file con percorsi completi vengono prodotti nell'output.

Conclusione

Se il tuo lavoro prevede la gestione di mappe di memoria di processo, questo strumento è per te. In questo tutorial, abbiamo descritto l'utilizzo di base di questo comando. Una volta che hai finito di mettere in pratica ciò di cui abbiamo discusso qui, vai alla pagina man degli strumenti per saperne di più.