Vous pouvez obtenir ce type d'informations dans le /proc/<pid>/smaps
fichier pour chaque processus sous la forme de l' Pss
entrée (abréviation de "Proportionional share size").
Dans l'exemple ci-dessus avec 200 Mo "partagés" entre deux processus, chaque processus affichera 100 Mo dans l'entrée PSS pour ce mappage, c'est-à-dire que la mémoire est répartie uniformément entre les processus qui la partagent (jusqu'à ce qu'elle soit copiée et non partagée par l'un ou l'autre des processus).
Voici un extrait de l'exécution de quelque chose comme ce que vous avez publié:
$ 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
...
(Il y a beaucoup de choses dans ces fichiers, y compris des mappages pour des bibliothèques partagées qui sont potentiellement partagées entre de nombreux processus, et donc chaque processus n'est pris en compte que dans une petite partie de son entrée PSS.)
Voici un bel article à ce sujet: ELC: Quelle quantité de mémoire les applications utilisent-elles vraiment?
Je ne connais pas d'outil de type top commun pour afficher ces informations, et je ne pense pas ps
avoir d'options pour le montrer malheureusement non plus. L'article pointe vers un référentiel avec des scripts python appelé pagemap
par Matt Mackall que vous pouvez utiliser ou adapter.
Plug sans vergogne: vous trouverez quelques articles sur Unix et Linux sur PSS et le smaps
fichier si cela vous intéresse.