Você pode consultar /proc/<pid>/maps, /proc/<pid>/smaps
(ou pmap -x <pid>
se o seu SO suportar) IDs de processos interessados e comparar saídas para determinar regiões de memória compartilhada. Isso inclui segmentos de memória compartilhada por meio de chamadas shmget, bem como quaisquer bibliotecas compartilhadas, arquivos.
Editar: Como mr.spuratic apontou sua resposta aqui tem mais detalhes no lado do kernel
Você pode olhar para um processo RSS usando ps, mas não leva em consideração todas as páginas compartilhadas. Para ver o RSS para um processo específico, veja abaixo
cv@thunder:~$ ps -o rss,pid,comm -p $$,7023
RSS PID COMMAND
22060 7023 xfwm4
6876 18094 bash
A ferramenta smem
fornece informações mais detalhadas, levando em consideração as páginas compartilhadas. Veja abaixo a saída para o mesmo processo acima
cv@thunder:~$ smem -t |egrep "RSS|$$|7023"
PID User Command Swap USS PSS RSS
9852 cv grep -E RSS|18094|7023 0 340 367 2220
18094 cv bash 0 3472 4043 6876
7023 cv xfwm4 --display :0.0 --sm-c 0 5176 7027 22192
De man smem
:
smem reports physical memory usage, taking shared memory pages into account. Unshared memory is reported as the USS (Unique Set Size). Shared
memory is divided evenly among the processes sharing that memory. The unshared memory (USS) plus a process's proportion of shared memory is
reported as the PSS (Proportional Set Size). The USS and PSS only include physical memory usage. They do not include memory that has been
swapped out to disk.