proc/[pid]の中身を全部読んでみる ~ map_filesからnuma_mapsまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。
# sleep 365d > /dev/null &
[1] 3792
# ls /proc/3792
attr cwd map_files oom_adj schedstat task
autogroup environ maps oom_score sessionid timers
auxv exe mem oom_score_adj setgroups uid_map
cgroup fd mountinfo pagemap smaps wchan
clear_refs fdinfo mounts patch_state stack
cmdline gid_map mountstats personality stat
comm io net projid_map statm
coredump_filter limits ns root status
cpuset loginuid numa_maps sched syscall
# cd /proc/3792
map_files
# ll map_files/
total 0
lr--------. 1 root root 64 Jan 12 04:15 400000-406000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 606000-607000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 607000-608000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 7f8cfbd49000-7f8d02273000 -> /usr/lib/locale/locale-archive
lr--------. 1 root root 64 Jan 12 04:15 7f8d02273000-7f8d02436000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02436000-7f8d02636000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02636000-7f8d0263a000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d0263a000-7f8d0263c000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02641000-7f8d02663000 -> /usr/lib64/ld-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02862000-7f8d02863000 -> /usr/lib64/ld-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02863000-7f8d02864000 -> /usr/lib64/ld-2.17.so
# ll map_files/
total 0
lr--------. 1 root root 64 Jan 12 04:15 400000-406000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 606000-607000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 607000-608000 -> /usr/bin/sleep
lr--------. 1 root root 64 Jan 12 04:15 7f8cfbd49000-7f8d02273000 -> /usr/lib/locale/locale-archive
lr--------. 1 root root 64 Jan 12 04:15 7f8d02273000-7f8d02436000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02436000-7f8d02636000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02636000-7f8d0263a000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d0263a000-7f8d0263c000 -> /usr/lib64/libc-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02641000-7f8d02663000 -> /usr/lib64/ld-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02862000-7f8d02863000 -> /usr/lib64/ld-2.17.so
lr--------. 1 root root 64 Jan 12 04:15 7f8d02863000-7f8d02864000 -> /usr/lib64/ld-2.17.so
メモリ領域の割り当てです。ここからここまでのメモリはこのファイルが対応しています。という情報だと思います。
maps
# cat maps
00400000-00406000 r-xp 00000000 08:01 16801948 /usr/bin/sleep
00606000-00607000 r--p 00006000 08:01 16801948 /usr/bin/sleep
00607000-00608000 rw-p 00007000 08:01 16801948 /usr/bin/sleep
007aa000-007cb000 rw-p 00000000 00:00 0 [heap]
7f8cfbd49000-7f8d02273000 r--p 00000000 08:01 25166854 /usr/lib/locale/locale-archive
7f8d02273000-7f8d02436000 r-xp 00000000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d02436000-7f8d02636000 ---p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d02636000-7f8d0263a000 r--p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d0263a000-7f8d0263c000 rw-p 001c7000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d0263c000-7f8d02641000 rw-p 00000000 00:00 0
7f8d02641000-7f8d02663000 r-xp 00000000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02859000-7f8d0285c000 rw-p 00000000 00:00 0
7f8d02861000-7f8d02862000 rw-p 00000000 00:00 0
7f8d02862000-7f8d02863000 r--p 00021000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02863000-7f8d02864000 rw-p 00022000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02864000-7f8d02865000 rw-p 00000000 00:00 0
7fff9fb35000-7fff9fb56000 rw-p 00000000 00:00 0 [stack]
7fff9fbb0000-7fff9fbb2000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
# cat maps
00400000-00406000 r-xp 00000000 08:01 16801948 /usr/bin/sleep
00606000-00607000 r--p 00006000 08:01 16801948 /usr/bin/sleep
00607000-00608000 rw-p 00007000 08:01 16801948 /usr/bin/sleep
007aa000-007cb000 rw-p 00000000 00:00 0 [heap]
7f8cfbd49000-7f8d02273000 r--p 00000000 08:01 25166854 /usr/lib/locale/locale-archive
7f8d02273000-7f8d02436000 r-xp 00000000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d02436000-7f8d02636000 ---p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d02636000-7f8d0263a000 r--p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d0263a000-7f8d0263c000 rw-p 001c7000 08:01 25166795 /usr/lib64/libc-2.17.so
7f8d0263c000-7f8d02641000 rw-p 00000000 00:00 0
7f8d02641000-7f8d02663000 r-xp 00000000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02859000-7f8d0285c000 rw-p 00000000 00:00 0
7f8d02861000-7f8d02862000 rw-p 00000000 00:00 0
7f8d02862000-7f8d02863000 r--p 00021000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02863000-7f8d02864000 rw-p 00022000 08:01 25166788 /usr/lib64/ld-2.17.so
7f8d02864000-7f8d02865000 rw-p 00000000 00:00 0
7fff9fb35000-7fff9fb56000 rw-p 00000000 00:00 0 [stack]
7fff9fbb0000-7fff9fbb2000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
map_filesの詳細ですね。rwxpはそれぞれ、read,write,excv,shared/privateを表すようです。
アセンブリ解析に使えそうです。
mem
cat mem
するとcat: mem: Input/output error
となりました。
open(2),read(2)
などの関数を使ってメモリにアクセスする際に利用するようです。
mountinfo
# cat mountinfo
18 39 0:18 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw,seclabel
19 39 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
20 39 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs rw,seclabel,size=292992k,nr_inodes=73248,mode=755
21 18 0:17 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:7 - securityfs securityfs rw
22 20 0:19 / /dev/shm rw,nosuid,nodev shared:3 - tmpfs tmpfs rw,seclabel
23 20 0:12 / /dev/pts rw,nosuid,noexec,relatime shared:4 - devpts devpts rw,seclabel,gid=5,mode=620,ptmxmode=000
24 39 0:20 / /run rw,nosuid,nodev shared:23 - tmpfs tmpfs rw,seclabel,mode=755
25 18 0:21 / /sys/fs/cgroup ro,nosuid,nodev,noexec shared:8 - tmpfs tmpfs ro,seclabel,mode=755
...
# cat mountinfo
18 39 0:18 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw,seclabel
19 39 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
20 39 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs rw,seclabel,size=292992k,nr_inodes=73248,mode=755
21 18 0:17 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:7 - securityfs securityfs rw
22 20 0:19 / /dev/shm rw,nosuid,nodev shared:3 - tmpfs tmpfs rw,seclabel
23 20 0:12 / /dev/pts rw,nosuid,noexec,relatime shared:4 - devpts devpts rw,seclabel,gid=5,mode=620,ptmxmode=000
24 39 0:20 / /run rw,nosuid,nodev shared:23 - tmpfs tmpfs rw,seclabel,mode=755
25 18 0:21 / /sys/fs/cgroup ro,nosuid,nodev,noexec shared:8 - tmpfs tmpfs ro,seclabel,mode=755
...
マウントされたファイルの詳細情報が記載されているようです。
sleepするだけのプロセスなのに30行のマウント情報がありました。
こういうのを読む記事も作りたいですね。
mounts
# cat mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=292992k,nr_inodes=73248,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
...
# cat mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=292992k,nr_inodes=73248,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
...
mountinfo
と同じような情報です。
mountstats
# cat mountstats
device rootfs mounted on / with fstype rootfs
device sysfs mounted on /sys with fstype sysfs
device proc mounted on /proc with fstype proc
device devtmpfs mounted on /dev with fstype devtmpfs
device securityfs mounted on /sys/kernel/security with fstype securityfs
device tmpfs mounted on /dev/shm with fstype tmpfs
device devpts mounted on /dev/pts with fstype devpts
...
# cat mountstats
device rootfs mounted on / with fstype rootfs
device sysfs mounted on /sys with fstype sysfs
device proc mounted on /proc with fstype proc
device devtmpfs mounted on /dev with fstype devtmpfs
device securityfs mounted on /sys/kernel/security with fstype securityfs
device tmpfs mounted on /dev/shm with fstype tmpfs
device devpts mounted on /dev/pts with fstype devpts
...
マウント情報です。3ファイルもいるのでしょうか。
net
# ls net/
anycast6 fib_triestat ip6_mr_vif ip_tables_names netstat raw snmp6 udp
arp icmp ip6_tables_matches ip_tables_targets nf_conntrack raw6 sockstat udp6
connector if_inet6 ip6_tables_names ipv6_route nf_conntrack_expect route sockstat6 udplite
dev igmp ip6_tables_targets mcfilter packet rt6_stats softnet_stat udplite6
dev_mcast igmp6 ip_mr_cache mcfilter6 protocols rt_acct stat unix
dev_snmp6 ip6_flowlabel ip_mr_vif netfilter psched rt_cache tcp wireless
fib_trie ip6_mr_cache ip_tables_matches netlink ptype snmp tcp6 xfrm_stat
# ls net/
anycast6 fib_triestat ip6_mr_vif ip_tables_names netstat raw snmp6 udp
arp icmp ip6_tables_matches ip_tables_targets nf_conntrack raw6 sockstat udp6
connector if_inet6 ip6_tables_names ipv6_route nf_conntrack_expect route sockstat6 udplite
dev igmp ip6_tables_targets mcfilter packet rt6_stats softnet_stat udplite6
dev_mcast igmp6 ip_mr_cache mcfilter6 protocols rt_acct stat unix
dev_snmp6 ip6_flowlabel ip_mr_vif netfilter psched rt_cache tcp wireless
fib_trie ip6_mr_cache ip_tables_matches netlink ptype snmp tcp6 xfrm_stat
ネットワーキングに関する情報が記載されていました。PPIDが1だったのでsystemd
からフォークされているため、
これらの情報はすべてsystemd
の情報がそのままコピーされていると思われる。最初から/proc/1
を読めばよかったんじゃないか説はある。
ns
# ll ns
total 0
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 ipc -> ipc:[4026531839]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 mnt -> mnt:[4026531840]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 net -> net:[4026531956]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 pid -> pid:[4026531836]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 uts -> uts:[4026531838]
# ll ns
total 0
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 ipc -> ipc:[4026531839]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 mnt -> mnt:[4026531840]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 net -> net:[4026531956]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 pid -> pid:[4026531836]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 user -> user:[4026531837]
lrwxrwxrwx. 1 root root 0 Jan 12 04:48 uts -> uts:[4026531838]
このプロセスの名前空間をメモっておく場所のようです。
# readlink -f ns/ipc
/proc/3792/ns/ipc:[4026531839]
シンボリックリンクになっているようですが、リンク先にいけなかったので参照先を探しましたが、どうやらここにあるようです。
よくわかりませんが仮想化、コンテナ技術の際にカーネルの機能経由とかで利用するのでしょう。
numa_maps
# cat numa_maps
00400000 default file=/usr/bin/sleep
00606000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4
00607000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4
007aa000 default heap anon=2 dirty=2 N0=2 kernelpagesize_kB=4
7f8cfbd49000 default file=/usr/lib/locale/locale-archive mapped=1 mapmax=11 N0=1 kernelpagesize_kB=4
7f8d02273000 default file=/usr/lib64/libc-2.17.so mapped=79 mapmax=35 N0=79 kernelpagesize_kB=4
7f8d02436000 default file=/usr/lib64/libc-2.17.so
7f8d02636000 default file=/usr/lib64/libc-2.17.so anon=4 dirty=4 N0=4 kernelpagesize_kB=4
# cat numa_maps
00400000 default file=/usr/bin/sleep
00606000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4
00607000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4
007aa000 default heap anon=2 dirty=2 N0=2 kernelpagesize_kB=4
7f8cfbd49000 default file=/usr/lib/locale/locale-archive mapped=1 mapmax=11 N0=1 kernelpagesize_kB=4
7f8d02273000 default file=/usr/lib64/libc-2.17.so mapped=79 mapmax=35 N0=79 kernelpagesize_kB=4
7f8d02436000 default file=/usr/lib64/libc-2.17.so
7f8d02636000 default file=/usr/lib64/libc-2.17.so anon=4 dirty=4 N0=4 kernelpagesize_kB=4
maps
の情報と類似していますね。たぶんそういうやつです。
所感
mount
に関する情報が多かったです。マウントやファイルシステムもわかってないのでそのうち勉強しようと思います。
シンボリックリンクでいいじゃんと思っています。
参考
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man5/proc.5.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/numa.7.html
Author And Source
この問題について(proc/[pid]の中身を全部読んでみる ~ map_filesからnuma_mapsまで ~), 我々は、より多くの情報をここで見つけました https://qiita.com/ihym/items/86e4d4093eceb54c45fd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .