Tutorial del comando pmap de Linux para principiantes (5 ejemplos)
La línea de comandos de Linux ofrece muchasherramientas que te ayudan a saber más sobre los procesos que están actualmente activos en tu sistema. Una de estas utilidades es pmap, que informa del mapa de memoria de los procesos. En este tutorial, hablaremos de los fundamentos de pmap utilizando algunos ejemplos fáciles de entender.
Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos aquí han sido probados en una máquina Ubuntu 20.04 LTS.
El comando pmap de Linux
El comando pmap en Linux te permite ver el mapa de memoria de uno o más procesos. A continuación se muestra su sintaxis:
pmap [options] pid [...]
Y así es como lo explica la página man de la herramienta:
The pmap command reports the memory map of a process or processes.
A continuación se presentan algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una mejor idea de cómo funciona el comando pmap.
Q1. ¿Cómo se utiliza pmap?
El uso básico es sencillo. Sólo tienes que ejecutar el comando «pmap» sin ninguna opción. Por supuesto, tienes que pasar un PID de proceso como entrada.
Por ejemplo, he utilizado pmap de la siguiente manera:
pmap 5146
Y aquí tienes una parte de la salida que se produjo:
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
...
...
...
Así que ahí lo tienes, la salida te muestra primero el nombre del proceso y luego sigue con el mapa de memoria.
Q2. ¿Cómo hacer que pmap muestre la salida extendida?
Para que pmap muestre la salida en formato extendido, utiliza la opción de línea de comandos -x. Por ejemplo:
pmap -x 5146
A continuación se muestra una parte de la salida producida:
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
...
...
...
Ten en cuenta que si necesitas aún más detalles, puedes utilizar la opción de línea de comandos -X.
Q3. ¿Cómo hacer que pmap muestre el formato del dispositivo en la salida?
Esto se puede hacer utilizando la opción -d de la línea de comandos. Por ejemplo:
pmap -d 5146
Y aquí tienes una parte de la salida producida:
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
...
...
...
Así puedes ver que se ha añadido una nueva columna «dispositivo» en la salida.
Q4. ¿Cómo eliminar las cabeceras y pies de página de la salida de pmap?
Si no quieres ver cosas como los nombres de las columnas en la salida del pmap, puedes utilizar la opción de línea de comandos -q.
Por ejemplo:
pmap -q -d 5146
La siguiente es la salida:
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
Así puedes ver que se ha eliminado la cabecera de la salida.
Q5. ¿Cómo hacer que pmap muestre las rutas completas en la salida?
Si quieres que pmap muestre la ruta completa de los archivos en la columna de mapeo, puedes utilizar la opción de línea de comandos -p.
Por ejemplo:
pmap -p 5146
Y aquí está la salida producida por este 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
Así puedes ver que los nombres de los archivos con las rutas completas se producen en la salida.
Conclusión
Si tu trabajo implica tratar con mapas de memoria de procesos, esta herramienta es para ti. En este tutorial, hemos descrito el uso básico de este comando. Una vez que hayas terminado de practicar todo lo que hemos discutido aquí, dirígete a lapágina man de la herramienta para aprender más sobre ella.