前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux深入proc文件系统之pid目录(下)

linux深入proc文件系统之pid目录(下)

作者头像
入门笔记
发布2022-06-02 14:56:02
3.5K0
发布2022-06-02 14:56:02
举报
文章被收录于专栏:入门小站入门小站

proc 是一个虚拟文件系统,在Linux 系统中它被挂载于/proc 目录之上。proc 有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用的功能,也是Linux 变得更加特别的功能就是以文本流的形式来访问进程信息。很Linux 命令( 比如 ps 、toPpstree 等) 都需要使用这个文件系统的信息。

maps

/proc/[pid]/maps显示进程内存区域映射信息

代码语言:javascript
复制
> cat /proc/1751/maps
00400000-00401000 r-xp 00000000 fd:01 100897359                          /opt/java/jdk1.8.0_231/bin/java
00600000-00601000 r--p 00000000 fd:01 100897359                          /opt/java/jdk1.8.0_231/bin/java
00601000-00602000 rw-p 00001000 fd:01 100897359                          /opt/java/jdk1.8.0_231/bin/java
01542000-01563000 rw-p 00000000 00:00 0                                  [heap]
6c7c00000-6e0100000 rw-p 00000000 00:00 0 
6e0100000-76d400000 ---p 00000000 00:00 0 
76d400000-797580000 rw-p 00000000 00:00 0 
797580000-7c0000000 ---p 00000000 00:00 0 
7c0000000-7c18a0000 rw-p 00000000 00:00 0 
7c18a0000-800000000 ---p 00000000 00:00 0 
  • address字段表示进程中内存映射占据的地址空间,格式为十六进制的BeginAddress-EndAddress。
  • perms字段表示权限,共四个字符,依次为rwxs或rwxp,其中r为read,w为write,x为execute,s为- -shared,p为private,对应位置没有权限时用一个短横线代替。
  • offset字段表示内存映射地址在文件中的字节偏移量。
  • dev字段表示device,格式为major:minor。
  • inode字段表示对应device的inode,0表示内存映射区域没有关联的inode,如未初始化的BSS数据段就是这种情况。
  • pathname字段用于内存映射的文件,对于ELF格式的文件来说,可以通过命令readelf -l查看ELF程序头部的Offset字段,与maps文件的offset字段作对比。pathname可能为空,表示匿名映射,这种情况下难以调试进程,如gdb、strace等命令。除了正常的文件路径之外,pathname还可能是下面的值:
代码语言:javascript
复制
[stack]    初始进程(主线程)的stack
[stack:<tid>]    线程ID为tid的stack. 对应于/proc/[pid]/task/[tid]/路径
[vdso]    Virtual Dynamically linked Shared Object
[heap]    进程的heap

root

/proc/[pid]/root是进程根目录的符号链接

代码语言:javascript
复制
> ls -al /proc/1751/root
lrwxrwxrwx 1 root root 0 Jul 14 22:38 /proc/1751/root -> /

stack

/proc/[pid]/stack显示当前进程的内核调用栈信息,只有内核编译时打开了CONFIG_STACKTRACE编译选项,才会生成这个文件

代码语言:javascript
复制
> cat /proc/1751/stack 
[<ffffffffa4112496>] futex_wait_queue_me+0xc6/0x130
[<ffffffffa411323b>] futex_wait+0x17b/0x280
[<ffffffffa4114fa6>] do_futex+0x106/0x5a0
[<ffffffffa41154c0>] SyS_futex+0x80/0x190
[<ffffffffa4793f92>] system_call_fastpath+0x25/0x2a
[<ffffffffffffffff>] 0xffffffffffffffff

statm

/proc/[pid]/statm显示进程所占用内存大小的统计信息,包含七个值,度量单位是page(page大小可通过getconf PAGESIZE得到)

代码语言:javascript
复制
> cat /proc/1751/statm 
2507998 361498 1427 1 0 2466085 0
  • a)进程占用的总的内存;
  • b)进程当前时刻占用的物理内存;
  • c)同其它进程共享的内存;
  • d)进程的代码段;
  • e)共享库(从2.6版本起,这个值为0);
  • f)进程的堆栈;
  • g)dirty pages(从2.6版本起,这个值为0)

status

/proc/1751/status当前shell命令所在进程的信息

代码语言:javascript
复制
> cat /proc/1751/status 
Name:   java
Umask:  0022
State:  S (sleeping)
Tgid:   1751
Ngid:   0
Pid:    1751
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 256
Groups: 0 
VmPeak: 10064696 kB
VmSize: 10031992 kB

syscall

/proc/1751/syscall显示当前进程正在执行的系统调用

代码语言:javascript
复制
> cat /proc/1751/syscall 
202 0x7fefc50279d0 0x0 0x6d8 0x0 0x0 0x7fefc5027700 0x7ffdb03f6e38 0x7fefc4c03fd7

第一个值是系统调用号(7代表poll),后面跟着6个系统调用的参数值(位于寄存器中),最后两个值依次是堆栈指针和指令计数器的值。如果当前进程虽然阻塞,但阻塞函数并不是系统调用,则系统调用号的值为-1,后面只有堆栈指针和指令计数器的值。如果进程没有阻塞,则这个文件只有一个“running”的字符串。

内核编译时打开了CONFIG_HAVE_ARCH_TRACEHOOK编译选项,才会生成这个文件。

wchan

/proc/1751/wchan显示当进程休眠时,内核当前运行的函数

代码语言:javascript
复制
> cat /proc/1751/wchan
futex_wait_queue_me

其它目录

  • /proc/[pid]/task,目录,每个线程一个子目录,目录名为线程ID。
  • /proc/[pid]/stat,文件,进程状态信息,用于ps命令。
  • /proc/[pid]/uid_map,文件,用户ID映射信息,详见(man user_namespaces)。
  • /proc/[pid]/gid_map,文件,组ID映射信息,详见(man user_namespaces)。
  • /proc/[pid]/mountinfo,文件,挂载信息,格式为36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue,以空格作为分隔符,从左到右各字段的意思分别是唯一挂载ID、父挂载ID、文件系统的设备主从号码、文件系统中挂载的根节点、相对于进程根节点的挂载点、挂载权限等挂载配置、可选配置、短横线表示前面可选配置的结束、文件系统类型、文件系统特有的挂载源或者为none、额外配置。
  • /proc/[pid]/mounts,文件,挂载在当前进程的文件系统列表,格式参照(man fstab)。
  • /proc/[pid]/mountstats,文件,挂载信息,格式形如device /dev/sda7 mounted on /home with fstype ext3 [statistics]。
  • /proc/[pid]/ns/,目录,保存了每个名字空间的入口,详见(man namespaces)。

相关文章

linux深入proc文件系统(上)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • maps
  • root
  • stack
  • statm
  • status
  • syscall
  • wchan
  • 其它目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档