$ pmap -x 10400
10400: ./a.out
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 0 0 0 r-x-- a.out
0000000000600000 0 4 4 r---- a.out
0000000000601000 0 4 4 rw--- a.out
00007f957085f000 0 4 0 r-x-- libc-2.15.so
00007f9570a12000 0 0 0 ----- libc-2.15.so
00007f9570c11000 0 16 16 r---- libc-2.15.so
00007f9570c15000 0 8 8 rw--- libc-2.15.so
00007f9570c17000 0 8 8 rw--- [ anon ]
00007f9570c1c000 0 0 0 r-x-- ld-2.15.so
00007f9570e1f000 0 12 12 rw--- [ anon ]
00007f9570e3c000 0 8 8 rw--- [ anon ]
00007f9570e3e000 0 4 4 r---- ld-2.15.so
00007f9570e3f000 0 8 8 rw--- ld-2.15.so
00007fff18a6d000 0 12 12 rw--- [ stack ]
00007fff18bff000 0 4 0 r-x-- [ anon ]
ffffffffff600000 0 0 0 r-x-- [ anon ]
---------------- ------ ------ ------
total kB 4148 92 84
RSSは92です
$ ps -o rss,sz,vsz 10400
RSS SZ VSZ
80 1037 4148
RSSは80です
なぜそして何が起こったのですか?
答え1
psのマニュアルページから:
The SIZE and RSS fields don’t count some parts of a process including
the page tables, kernel stack, struct thread_info, and struct
task_struct. This is usually at least 20 KiB of memory that is always
resident. SIZE is the virtual size of the process (code+data+stack).
答え2
デフォルトでは、これは異なるデータソースを使用するために発生する可能性があります。 - /proc/PID/maps は pmap で使用されます。 - /proc/PID/statはpsで使用されます。
これらのソースには、さまざまな方法を使用して計算されたデータが含まれています(報告されているようにここ、例えば)。