proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
概要
proc/[pid]の中身を全部読んでみるに経緯をまとめていますのでご覧いただければ幸いです。
# 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
attr/
# ls attr/
current exec fscreate keycreate prev sockcreate
# cat current
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# cat prev
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
current
とprev
以外は空ファイルでした。
調べたところ、これらのファイルはSELinux機能で参照するようです。
Linuxではパーミッションという機能でファイルやディレクトリの読み取り、書き込み、実行権限を管理できますが、それの拡張機能がSELinuxと呼ばれる機能です。
パーミッションの代わりにSELinuxコンテキストという値で管理しているようです。
current
にはこのプロセス自身のSELinuxコンテキストが記述してあり、prev
には、直前に実行されたプロセスのSELinuxコンテキストが書かれるようです。
このプロセスが作成するファイルに設定するSELinuxコンテキストはexec
に書かれるようですが、
今回の/proc/3792/exec
は空ファイルなので、デフォルト値で作成する模様です。
デフォルト値はこちらで確認ができそうです。
# semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
SELinuxの勉強は今後とします。
autogroup
# cat autogroup
/autogroup-401 nice 0
# cat autogroup
/autogroup-401 nice 0
autogroupはcpuのスケジューリング(優先度)に用いるファイルです。
autogroup-401
というグループ(セキュリティグループという)に所属するプロセスはデフォルトである優先度0でスケジューリングされるようです。プロセスがforkした際は同じグループに所属するため、たくさんforkしてもほかのプロセスのcpu利用を邪魔しないようです。
auxv
# ll | grep auxv
-r--------. 1 root root 0 Jan 12 05:09 auxv
# cat auxv
!寺
d@@粟 d
捐牛゚級P吸
# od -x auxv
0000000 0021 0000 0000 0000 0000 9fbb 7fff 0000
0000020 0010 0000 0000 0000 fbff 1f8b 0000 0000
0000040 0006 0000 0000 0000 1000 0000 0000 0000
0000060 0011 0000 0000 0000 0064 0000 0000 0000
0000100 0003 0000 0000 0000 0040 0040 0000 0000
0000120 0004 0000 0000 0000 0038 0000 0000 0000
....
# ll | grep auxv
-r--------. 1 root root 0 Jan 12 05:09 auxv
# cat auxv
!寺
d@@粟 d
捐牛゚級P吸
# od -x auxv
0000000 0021 0000 0000 0000 0000 9fbb 7fff 0000
0000020 0010 0000 0000 0000 fbff 1f8b 0000 0000
0000040 0006 0000 0000 0000 1000 0000 0000 0000
0000060 0011 0000 0000 0000 0064 0000 0000 0000
0000100 0003 0000 0000 0000 0040 0040 0000 0000
0000120 0004 0000 0000 0000 0038 0000 0000 0000
....
補助ベクトル (auxiliary vector)
プログラム実行時にプロセスに渡されたELFインタプリタ情報が格納されているとのこと。
カーネルはこの情報を見てメモリマップや共有ライブラリのロードなど行うっぽい。
cgroup
# cat cgroup
11:cpuset:/
10:blkio:/
9:devices:/user.slice
8:hugetlb:/
7:net_prio,net_cls:/
6:perf_event:/
5:memory:/
4:cpuacct,cpu:/
3:pids:/
2:freezer:/
1:name=systemd:/user.slice/user-1000.slice/session-89.scope
# cat cgroup
11:cpuset:/
10:blkio:/
9:devices:/user.slice
8:hugetlb:/
7:net_prio,net_cls:/
6:perf_event:/
5:memory:/
4:cpuacct,cpu:/
3:pids:/
2:freezer:/
1:name=systemd:/user.slice/user-1000.slice/session-89.scope
cgroup
はプロセスに制限を設定できる機能です。CPU利用率やメモリの上限など細かく設定できるそうです。cgroupが設定されていたらautogroupは参照されないとのこと。autogroupの上位互換です。
左から階層ID番号 : 階層に関連付けたサブシステムの集合 : プロセスが所属する階層内のコントロールグループ
だそうです。要勉強。
clear_refs
# cat clear_refs
cat: clear_refs: Invalid argument
# cat clear_refs
cat: clear_refs: Invalid argument
catしたら怒られました。write_onlyかつ書き込めるのはプロセスの所有者のみのようです。
このファイルにbitを書き込むことでプロセスに紐づくメモリ参照情報を削除でき、
clear_refsした前後の参照を確認することでプロセスのメモリ使用率を計測できるそうです。
cmdline
# cat cmdline
sleep365d
# tr \\0 _ < cmdline
sleep_365d_
# cat cmdline
sleep365d
# tr \\0 _ < cmdline
sleep_365d_
プロセス起動時に実行したコマンド。引数(ls -lなど)も表示されるようです。
区切り文字は\0(NULL)でした。
comm
# cat comm
sleep
# cat comm
sleep
ps -c
で表示されるコマンド名とのこと。
coredump_filter
# cat coredump_filter
00000033
# cat coredump_filter
00000033
プロセスが異常終了などした際に吐くエラーのbitフィルター設定だそうです。
00000033がそれぞれ何のマスクなのかはわかりません。
cpuset
# cat cpuset
/
# cat cpuset
/
cgroupで参照し、CPUとメモリの対応を限定させる機能のようです。いかにも仮想化っぽいですね。
所感
わからないものが多すぎました。
cgroupはぜひ押さえておきたいです。
参考
http://blue-9.hatenadiary.com/entry/2017/03/14/212929
http://www.usupi.org/sysad/024.html
http://man7.org/linux/man-pages/man5/proc.5.html
https://www.atmarkit.co.jp/flinux/rensai/watch2007/watch10a.html
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/resource_management_guide/sec-cpuset
https://blog.goo.ne.jp/tell14/e/d03e57fbe77a73f7991da7016824cfbf
http://manpages.ubuntu.com/manpages/bionic/ja/man5/proc.5.html
https://mjmwired.net/kernel/Documentation/filesystems/proc.txt
Author And Source
この問題について(proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~), 我々は、より多くの情報をここで見つけました https://qiita.com/ihym/items/ece7f4badb289934dbf7著者帰属:元の著者の情報は、元の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 .