_proc
https://man7.org/linux/man-pages/man5/proc.5.html
https://www.cnblogs.com/cute/archive/2011/04/20/2022280.html
proc文件系统是一个伪文件系统,他提供了一个接口以访问内核数据结构
如读取文件时遇到报错,部分是因为权限不够(一般限制属主读取),部分是该文件只供系统调用读取
如果想看一些文件的详细信息,请查询上方的man手册
/proc/pid
proc目录下有许多以数字命名的文件夹,其代表对应pid的进程目前的一些运行信息
以下以一个docker进程为例子,进程的pid可以通过ps -ef | grep docker来获取
子目录
pid/task:包含线程的信息,每个子目录都是一个tid号
pid/attr:提供与SElinux相关的api,只有在kernel设置了 CONFIG_SECURITY的情况下会被展示出来
pid/fd:包含进程打开的每一个文件的文件描述符
pid/fdinfo:以文件描述符命名,描述了每个进程打开的文件的信息
cat /proc/8432/fdinfo/7
pos: 0 偏移量
flags: 02004001 八进制数,用于展示访问模式和文件状态
mnt_id: 9 ID of the mount containing this file
pid/map_files:内存映射文件,命名格式为存储器起始和结束的地址,十六进制
pid/net:包含各种网络层信息
pid/ns:命名空间
文件
cmdline:启动命令
[root@master 8432]# cat cmdline
/usr/bin/dockerd-Hfd://--containerd=/run/containerd/containerd.sock
environ:环境变量,变量大写,值小写
[root@master 8432]# cat environ
LANG=en_US.UTF-8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binNOTIFY_SOCKET=/run/systemd/notifyLISTEN_PID=8432LISTEN_FDS=1
limits:资源使用限制
[root@master 8432]# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes unlimited unlimited processes
Max open files 1048576 1048576 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 14500 14500 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
maps:进程的每个可执行文件和库文件在内存中的映射区及其访问权限
[root@master 8432]# cat maps
c000000000-c002c00000 rw-p 00000000 00:00 0
c002c00000-c004000000 ---p 00000000 00:00 0
55ca7b56e000-55ca7e852000 r-xp 00000000 fd:01 276901 /usr/bin/dockerd
55ca7ea51000-55ca80337000 r--p 032e3000 fd:01 276901 /usr/bin/dockerd
55ca80337000-55ca803eb000 rw-p 04bc9000 fd:01 276901 /usr/bin/dockerd
cwd:运行环境的链接文件
mem:进程所占内存空间,只能由系统调用读取
stat:当前进程的状态信息,可读性差,一般用ps使用
statm:当前进程占用的内存的状态信息
status:可读性好的stat+statm
[root@master 8432]# cat status
Name: dockerd 进程名,最长16字节,超过会被截断
Umask: 0022
State: S (sleeping)
Tgid: 8432 线程gid
Ngid: 0 NUMA group ID,非统一访问内存
Pid: 8432 线程id
PPid: 1 父进程pid
TracerPid: 0 tracing进程的pid,0代表没有被traced
Uid: 0 0 0 0 Real, effective, saved set, and filesystem UIDs
Gid: 0 0 0 0
FDSize: 256 当前分配的文件描述符槽数
Groups:
VmPeak: 1413800 kB
VmSize: 1357548 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 87892 kB
VmRSS: 79328 kB
RssAnon: 52272 kB
RssFile: 27056 kB
RssShmem: 0 kB
VmData: 1223236 kB
VmStk: 132 kB
VmExe: 52112 kB
VmLib: 6368 kB
VmPTE: 508 kB
VmSwap: 0 kB
Threads: 15
SigQ: 0/14500
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: fffffffc3bba2800
SigIgn: 0000000000000000
SigCgt: fffffffdffc1feff
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp: 0
Speculation_Store_Bypass: vulnerable
Cpus_allowed: 3
Cpus_allowed_list: 0-1
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 19545
nonvoluntary_ctxt_switches: 19
stack:堆栈函数调用