/proc//maps

查看进程的虚拟地址空间是如何使用的。

该文件有6列,分别为:

地址:库在进程里地址范围

权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;

偏移量:库在进程里地址范围

设备:映像文件的主设备号和次设备号;

节点:映像文件的节点号;

路径: 映像文件的路径

每项都与一个vm_area_struct结构成员对应,

范例:

应用程序的正文段(权限为r-xp)从0x08048000到0x08049000,大小为4096;数据段从0x08049000到0x0804a000,大小为1KB。该应用程序使用了两个库:lib和libc。Libc 的正文段从0x00391000到0x004b4000,大小为1164KB;数据段从0x004b5000到0x004b8000,大小为12KB.

Ld 的正文段从00378000到0038d000,大小为84KB;数据段从0x0038e000到0x0038f000,大小为4KB。该应用程序所使用的库所占的虚拟空间的大小从0x4b8000到0x378000,大小为1280KB,其实真正大小为VmLib(1251KB);因为是按页分配,每页大小为4KB。

[root@localhost ~]# cat /proc/7114/maps

08047000-080dc000 r-xp 00000000 03:06 884901 /bin/bash

080dc000-080e3000 rwxp 00094000 03:06 884901 /bin/bash

080e3000-08129000 rwxp 080e3000 00:00 0 [heap]

4d575000-4d58a000 r-xp 00000000 03:06 736549 /lib/ld-2.3.4.so

4d58a000-4d58b000 r-xp 00015000 03:06 736549 /lib/ld-2.3.4.so

4d58b000-4d58c000 rwxp 00016000 03:06 736549 /lib/ld-2.3.4.so

4d58e000-4d6b1000 r-xp 00000000 03:06 736550 /lib/tls/libc-2.3.4.so

4d6b1000-4d6b2000 r-xp 00123000 03:06 736550 /lib/tls/libc-2.3.4.so

4d6b2000-4d6b5000 rwxp 00124000 03:06 736550 /lib/tls/libc-2.3.4.so

4d6b5000-4d6b7000 rwxp 4d6b5000 00:00 0

4d6de000-4d6e0000 r-xp 00000000 03:06 736552 /lib/libdl-2.3.4.so

4d6e0000-4d6e2000 rwxp 00001000 03:06 736552 /lib/libdl-2.3.4.so

4d807000-4d80a000 r-xp 00000000 03:06 736567 /lib/libtermcap.so.2.0.8

4d80a000-4d80b000 rwxp 00002000 03:06 736567 /lib/libtermcap.so.2.0.8

b7bf2000-b7c1e000 r-xp 00000000 03:06 881337 /usr/lib/gconv/GB18030.so

b7c1e000-b7c20000 rwxp 0002b000 03:06 881337 /usr/lib/gconv/GB18030.so

b7c20000-b7c26000 r-xs 00000000 03:06 881502 /usr/lib/gconv/gconv-modules.cache

b7c26000-b7d2f000 r-xp 02197000 03:06 852489 /usr/lib/locale/locale-archive

b7d2f000-b7f2f000 r-xp 00000000 03:06 852489 /usr/lib/locale/locale-archive

b7f2f000-b7f38000 r-xp 00000000 03:06 734450 /lib/libnss_files-2.3.4.so

b7f38000-b7f3a000 rwxp 00008000 03:06 734450 /lib/libnss_files-2.3.4.so

b7f3a000-b7f3c000 rwxp b7f3a000 00:00 0

b7f51000-b7f52000 rwxp b7f51000 00:00 0

bfc3d000-bfc52000 rw-p bfc3d000 00:00 0 [stack]

ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]

[root@localhost ~]#

参数 解释

address: 0085d000-00872000 虚拟内存区域的起始和终止地址文件所占的地址空间

perms:rw-p 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)

offset: 00000000 虚拟内存区域在被映射文件中的偏移量

dev: 03:08 文件的主设备号和次设备号

inode: 设备的节点号,0表示没有节点与内存相对应

name: /lib/ld-2.3.4.so 被映射文件的文件名

各共享库的代码段,存放着二进制可执行的机器指令,是由kernel把该库ELF文件的代码段map到虚存空间;

各共享库的数据段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;

用户代码段,存放着二进制形式的可执行的机器指令,是由kernel把ELF文件的代码段map到虚存空间;

用户数据段之上是代码段,存放着程序执行所需的全局变量,是由kernel把ELF文件的数据段map到虚存空间;

用户数据段之下是堆(heap),当且仅当malloc调用时存在,是由kernel把匿名内存map到虚存空间,堆则在程序中没有调用malloc的情况下不存在;

用户数据段之下是栈(stack),作为进程的临时数据区,是由kernel把匿名内存map到虚存空间,栈空间的增长方向是从高地址到低地址。

[root@localhost ~]# ldd /bin/bash

linux-gate.so.1 => (0xffffe000)

libtermcap.so.2 => /lib/libtermcap.so.2 (0x4d807000)

libdl.so.2 => /lib/libdl.so.2 (0x4d6de000)

libc.so.6 => /lib/tls/libc.so.6 (0x4d58e000)

/lib/ld-linux.so.2 (0x4d575000)

[root@localhost ~]#

这个所谓的"linux-gate.so.1"的内容就是内核映射的代码,系统中其实并不存在这样一个链接库文件,它的名字是由ldd自己起的,了0xffffe400这里的一段代码,这里就是内核为我们映射的系统调用入口代码。Mapped是该应用程序的虚拟空间的大小,这里的值比用top 或ps都大了4KB,就是最后0xffffe400-0xffffffff的代码;shared 给出共享的虚拟空间部分。

2 /proc//stat

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

[root@localhost ~]# cat /proc/6873/stat

6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0 [root@localhost ~]#

每个参数意思为:

参数 解释

pid=6873 进程(包括轻量级进程,即线程)号

comm=a.out 应用程序或命令的名字

task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

ppid=6723 父进程ID

pgid=6873 线程组号

sid=6723 c该任务所在的会话组ID

tty_nr=34819(pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号

tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。

task->flags=8388608 进程标志位,查看该任务的特性

min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数

cmin_flt=0 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目

maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数

cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目

utime=1587 该任务在用户态运行的时间,单位为jiffies

stime=1 该任务在核心态运行的时间,单位为jiffies

cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies

cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

priority=25 任务的动态优先级

nice=0 任务的静态优先级

num_threads=3 该任务所在的线程组里线程的个数

it_realvalue=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.

start_time=5882654 该任务启动的时间,单位为jiffies

vsize=1409024(page) 该任务的虚拟地址空间大小

rss=56(page) 该任务当前驻留物理地址空间的大小

Number of pages the process has in real memory,minu 3 for administrative purpose.

这些页可能用于代码,数据和栈。

rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值

start_code=134512640 该任务在虚拟地址空间的代码段的起始地址

end_code=134513720 该任务在虚拟地址空间的代码段的结束地址

start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址

kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.

kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值.

pendingsig=0 待处理信号的位图,记录发送给进程的普通信号

block_sig=0 阻塞信号的位图

sigign=0 忽略的信号的位图

sigcatch=082985 被俘获的信号的位图

wchan=0 如果该进程是睡眠状态,该值给出调度的调用点

nswap 被swapped的页数,当前没用

cnswap 所有子进程被swapped的页数的和,当前没用

exit_signal=17 该进程结束时,向父进程所发送的信号

task_cpu(task)=0 运行在哪个CPU上

task_rt_priority=0 实时进程的相对优先级别

task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程

3 /proc//status

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

[root@localhost ~]# cat /proc/self/status

Name: cat

State: R (running)

SleepAVG: 88%

Tgid: 5783

Pid: 5783

PPid: 5742

TracerPid: 0

Uid: 0 0 0 0

Gid: 0 0 0 0

FDSize: 256

Groups: 0 1 2 3 4 6 10

VmSize: 6588 kB

VmLck: 0 kB

VmRSS: 400 kB

VmData: 144 kB

VmStk: 2040 kB

VmExe: 14 kB

VmLib: 1250 kB

StaBrk: 0804e000 kB

Brk: 088df000 kB

StaStk: bfe03270 kB

ExecLim: 0804c000

Threads: 1

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000000000

SigCgt: 0000000000000000

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

输出解释

参数 解释

Name 应用程序或命令的名字

State 任务的状态,运行/睡眠/僵死/

SleepAVG 任务的平均等待时间(以nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg 也会相应地更大一些,所以计算出来的优先级也会相应高一些。

Tgid 线程组号

Pid 任务ID

Ppid 父进程ID

TracerPid 接收跟踪该进程信息的进程的ID号

Uid Uid euid suid fsuid

Gid Gid egid sgid fsgid

FDSize 文件描述符的最大个数,file->fds

Groups

VmSize(KB) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页

VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)

VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)

VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)

VmStk(KB) 任务在用户态的栈的大小 (stack_vm)

VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)

VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)

VmPTE 该进程的所有页表的大小,单位:kb

Threads 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。

SigQ 待处理信号的个数

SigPnd 屏蔽位,存储了该线程的待处理信号

ShdPnd 屏蔽位,存储了该线程组的待处理信号

SigBlk 存放被阻塞的信号

SigIgn 存放被忽略的信号

SigCgt 存放被俘获到的信号

CapInh Inheritable,能被当前进程执行的程序的继承的能力

CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性

CapEff Effective,进程的有效能力

范例 1

可以看出该应用程序的正文段(1KB)很小,说明代码很少,是依靠库(1251KB)来执行。栈(138KB)适中,说明没有太多许多嵌套函数或特别多的临时变量。VmLck为0说明进程没有锁住任何页。VmRSS表示当前进程使用的物理内存为2956KB。当进程开始使用已经申请的但还没有用的内存时,VmRSS的值开始增大,但是VmSize保持不变。

[root@localhost 1]# cat /proc/4668/status

Name: gam_server

State: S (sleeping)

SleepAVG: 88%

Tgid: 31999

Pid: 31999

PPid: 1

TracerPid: 0

Uid: 0 0 0 0

Gid: 0 0 0 0

FDSize: 256

Groups: 0 1 2 3 4 6 10

VmSize: 2136 kB

VmLck: 0 kB

VmRSS: 920 kB

VmData: 148 kB

VmStk: 88 kB

VmExe: 44 kB

VmLib: 1820 kB

VmPTE: 20 kB

Threads: 1

SigQ: 1/2047

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000001006

SigCgt: 0000000210000800

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

[root@localhost 31999]#

4 /proc//statm

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

输出解释

CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

参数 解释 /proc//status

Size (pages) 任务虚拟地址空间的大小 VmSize/4

Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

Shared(pages) 共享页数 0

Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4

Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4

Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4

dt(pages) 0

4

linux proc进程,linux 下 /proc/进程号/ 重要进程文件的内容解析相关推荐

  1. centos7根据端口查进程_linux下根据端口号查询对应进程

    linux下根据端口号查询对应进程 我们经常使用netstat -lnp可以查询对应端口跟进程,但是有些端口是在netstat -lnp里却没显示对应的进程pid,如果我们使用某个端口已经被占用,需要 ...

  2. Windows下查看端口号与进程关系的命令

    1.进入windows命令窗口之后,输入命令,输入netstat -ano就能查看系统当前所有的端口使用情况. 2.通过命令查找某一特定端口,在命令窗口中输入命令中输入netstat -ano |fi ...

  3. linux之在当前目录下删除不包含aa的文件

    1.问题 1.当前目录下删除不包含aa的文件和文件夹 2.解决办法 1. rm -rf `ls -al | grep -v "aa"`

  4. linux下根据端口号关闭进程

    环境 1.操作系统CentOS 7.6 64bit 1. 查找占用的程序. netstat -apn | grep 2181#查看到的内容 tcp6 0 0 :::2181 :::* LISTEN 6 ...

  5. win系统下根据端口号关闭进程

    1.根据端口号查看被占用的端口PID 运行cmd输入命令 netstat -ano|findstr  "you_port" 2.通过PID查看进程 tasklist|findstr ...

  6. Mac下根据端口号查询进程号Pid

    #!/bin/bash#use sh kill.sh 8080echo "$0" port="$1" echo $port##根据端口获得进程号 lsof -i ...

  7. Linux 删除指定目录下指定后缀名的所有文件

    删除指定目录下指定相同后缀名的所有文件,使用 rm 命令是无法直接删除的.所以通常是使用 find 命令找到指定目录下具有相同后缀名的所有文件,然后再利用 rm 进行删除.例如,删除 /root/ 目 ...

  8. Linux中 tomcat8 webapps下不能自动解压war文件

    今天被这个bug卡了一天,必须写下来. 昨天用命令jar把一个特别简单的小项目打包成了war包,在tomcat manager页面下部署进去是成功的,不过页面展示有问题.然后就想着今天重新打包了一下, ...

  9. linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量

    背景: 因最近试安装Linux下的jira,有一个中文插件安装后,一旦设置开机启动后,它是英文,而在终端再重新启动一次后呢,似乎插件生效,它又恢复为正常中文界面,我首先想这这涉及到一个环境变量的问题, ...

最新文章

  1. 小程序将form表单数据写入云数据库
  2. ES 的分布式架构原理能说一下么?
  3. you should specify the `steps` argument
  4. HDU1878 欧拉回路
  5. 绕过网关访问图片上传并解决跨域问题
  6. 关于jquery ajax发送以及php接受json数据的一点记录
  7. Linux统治超级计算领域的九个理由
  8. linux内核disabled,Linux内核关闭IPv6协议的方式
  9. rsync for linux
  10. Jmeter(四十八)_动态线程分析HTML测试报告
  11. python 保存图片_python 输出文档到world
  12. JLNews新闻点评系统--君兰IT
  13. 图片压缩大小的3种方法,简单快捷实用!
  14. Dagger2的介绍和配置
  15. 架构师应该具备什么技能
  16. 浏览器CookieSameSite
  17. 石家庄地铁路线安排网站的最终版本——博客登记
  18. 给出三个坐标点,求三角形周长。
  19. Flask开发轻博客(一):欢迎来到-Flask-的世界
  20. CSS中的块级元素、行内元素和行内块元素

热门文章

  1. C#LeetCode刷题之#202-快乐数(Happy Number)
  2. 通用职责分配软件原则之9-受保护变量原则
  3. 109_Power Pivot客户ABC(帕累托)分析度量值写法(非计算列)
  4. 通过例子理解事务的4种隔离级别
  5. Python之路---函数进阶
  6. Python高级——property属性
  7. python3 一 线程与互斥锁详解
  8. 列表,元组,集合,字典常用方法
  9. 超过1.2W星的「机器学习路线图」,你的收藏夹可以更新了!
  10. 对于全连接层的理解 全连接层的推导