Puede obtener ese tipo de información del /proc/<pid>/smaps
archivo para cada proceso en la forma de la Pss
entrada (abreviatura de "Tamaño de participación proporcional").
En el ejemplo anterior con 200 MB "compartidos" entre dos procesos, cada proceso mostraría 100 MB en la entrada de PSS para ese mapeo, es decir, la memoria se distribuye uniformemente entre los procesos que la comparten (hasta que cualquiera de los procesos la copie y no la comparta).
Aquí hay un extracto de ejecutar algo como lo que publicaste:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(Hay una gran cantidad de cosas en esos archivos, incluidas las asignaciones para bibliotecas compartidas que potencialmente se comparten entre muchos procesos y, por lo tanto, cada proceso solo cuenta una pequeña parte en su entrada de PSS).
Aquí hay un buen artículo sobre esto: ELC: ¿Cuánta memoria están usando realmente las aplicaciones?
No conozco una herramienta común para mostrar esta información, y ps
desafortunadamente no creo que tenga opciones para mostrarla. El artículo apunta a un repositorio con scripts de python llamados pagemap
por Matt Mackall que puedes usar o adaptar.
Plug desvergonzado: encontrará algunas publicaciones en Unix y Linux sobre PSS y el smaps
archivo si está interesado en eso.