search
LoginSignup
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

proc/[pid]の中身を全部読んでみる ~ setgroupsからwchanまで ~

概要

こちらに経緯をまとめていますのでご覧いただければ幸いです。

proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
proc/[pid]の中身を全部読んでみる ~ oom_adjからsessionidまで ~
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。

# 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

setgroups

# cat setgroups
allow

allowになっているとsetgroupsシステムコールが利用できるようです。
setgroupsは補助グループのリストを返してくれるそうです。なんのことでしょう。
いつか役に立つと信じて覚えておきます。

smaps

cat smaps
00400000-00406000 r-xp 00000000 08:01 16801948                           /usr/bin/sleep
Size:                 24 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd ex mr mp me dw sd
00606000-00607000 r--p 00006000 08:01 16801948                           /usr/bin/sleep
Size:                  4 kB
    ...

これも利用しているメモリの情報のようですね。メモリ管理は大変そうです。どれを見ればいいのでしょうか。

stack

# cat stack
[<ffffffffaa2cb09b>] hrtimer_nanosleep+0xbb/0x180
[<ffffffffaa2cb1f6>] SyS_nanosleep+0x96/0xb0
[<ffffffffaa98dede>] system_call_fastpath+0x25/0x2a
[<ffffffffffffffff>] 0xffffffffffffffff

メモリ上のスタックに積まれている情報のようです。

stat

# cat stat
3792 (sleep) S 1 3792 2132 0 -1 1077944320 284 0 0 0 0 0 0 0 20 0 1 0 31848330 110546944 65 18446744073709551615 4194304 4218500 140735872847584 140735872847112 140243604047856 0 0 0 0 18446744072269639835 0 0 17 0 0 0 0 0 0 6319400 6320704 8036352 140735872850184 140735872850195 140735872850195 140735872851949 0

statm

# cat statm
26989 65 47 6 0 78 0

ページ単位で測定したメモリ使用量についての情報だそうです。

status

# cat status
Name:   sleep
Umask:  0022
State:  S (sleeping)
Tgid:   3792
Ngid:   0
Pid:    3792
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 256
Groups: 0
VmPeak:   107956 kB
VmSize:   107956 kB
    ...

プロセスの基本情報や稼働状況が見れるようです。たぶんこれだけ見たら大体の状況はつかめるようです。

syscall

# cat syscall
35 0x7fff9fb54d10 0x0 0x0 0x7fff9fb54760 0x0 0x0 0x7fff9fb54d08 0x7f8d023387f0

実行しているシステムコール、スタックポインタ、プログラムカウンタなどのアドレスが記載されているようです。

task

# ll task/
total 0
dr-xr-xr-x. 7 root root 0 Jan 12 04:48 3792

# ls task/3792/
attr        cpuset   io         net            patch_state  setgroups  uid_map
auxv        cwd      limits     ns             personality  smaps      wchan
cgroup      environ  loginuid   numa_maps      projid_map   stack
children    exe      maps       oom_adj        root         stat
clear_refs  fd       mem        oom_score      sched        statm
cmdline     fdinfo   mountinfo  oom_score_adj  schedstat    status
comm        gid_map  mounts     pagemap        sessionid    syscall

3792プロセスの中に同じようなファイルがありました。プロセスとスレッドの関係のようです。

timers

このプロセスが持つタイマーのリストを表示されるようです。
この環境ではcat timersでは何も表示されませんでした。

uid_map

こちらは以前gid_mapで紹介しましたので省略します

wchan

# cat wchan
hrtimer_nanosleep

wait channelの略っぽい。
これ以上の情報が分からなかった

所感

途中からわからないしか書くことがなくなって地獄でしたが、
とりあえず書き上げることが目標だったので2日で書き抜きました。
後日に回すと二度と手を付けない自信があったので根気で乗り切りました。
わかる情報が増え次第、情報を追加していけたらなと思います。

参考

https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man7/user_namespaces.7.html
http://man7.org/linux/man-pages/man2/setgroups.2.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2
Help us understand the problem. What are the problem?