简单案例教你用PROC文件系统获取进程信息-阿里云开发者社区

开发者社区> 技术小甜> 正文

简单案例教你用PROC文件系统获取进程信息

简介:
+关注继续查看

本文将通过一个简单易懂的例子说明如何使用Linux下的PROC文件系统来获得进程的信息。通过PROC文件系统获取的信息主要是进程使用的虚拟内存、以及实际内存、信号机制方面的信息,和Linux下的其他监控工具搭配,能够对系统运行的情况有一个全面的掌握。首先提供一段PROC文件系统的简单介绍:

PROC文件系统是一个虚拟的文件系统,通过文件系统的接口实现,用于输出系统的运行状态。它以文件系统的形式,为操作系统本身和应用进程之间的通信提供了一个界面,使应用程序能够安全、方便地获得系统当前的运行状况和内核的内部数据信息,并可以修改某些系统的配置信息。另外,由于PROC以文件系统的接口实现,因此用户可以像访问普通文件一样对其进行访问,但它只存在于内存之中,并不存在于真正的物理磁盘当中。所以,当系统重启和电源关闭的时候,该系统中的数据和信息将全部消失。

表1说明了该文件系统中一些重要的文件和目录。

表1 重要的PROC文件系统文件和目录

文件或目录 说    明
/proc/1 关于进程1的信息目录。每个进程在/proc下有一个名为其进程号的目录
/proc/cpuinfo 处理器信息,如类型、制造商、型号和性能
/proc/devices 当前运行的核心配置的设备驱动的列表
/proc/dma 显示当前使用的DMA通道
/proc/filesystems 核心配置的文件系统
/proc/interrupts 显示使用的中断
/proc/ioports 当前使用的I/O端口
/proc/kcore 系统物理内存映像
/proc/kmsg 核心输出的消息,也被送到syslog
/proc/ksyms 核心符号表
/proc/loadavg 系统的平均负载
/proc/meminfo 存储器使用信息,包括物理内存和swap
/proc/modules 当前加载了哪些核心模块
/proc/net 网络协议状态信息
/proc/stat 系统的不同状态
/proc/version 核心版本
/proc/uptime 系统启动的时间长度

值得注意的是:所有上述文件给出易读的文本文件,有时可能是不易读的格式。有许多命令做了些格式化以更容易读。例如,free程序读/proc/meminfo并将给出的字节数转换为千字节(并增加了一些信息)。


下面将通过例子来说明如何使用PROC文件系统来获得进程的信息。

首先使用vi编辑器建立一个c源程序文件,编译后形成目标文件,该文件的主要功能是进行计算,将其保存在/root目录下,下面将其运行:

#cd /root                       //切换目录
#./calculate                    //运行该程序,则生成了以该程序为名称的进程

使用ps命令,则能发现在系统中运行了calculate这样一个进程:

#ps
root      2108 61.2 0.1 1344 224 pts/0    R    21:20   0:11 ./calculate
……

进程的基本信息都会存放在/proc文件系统中,具体位置是在/proc目录下。通过使用如下命令可以查看系统中运行进程的相关信息:

# ls /proc                      //查看/proc目录下的内容
//如下显示为系统中运行进程的信息所存放的目录,每个进程对应一个目录,加蓝的2108为本例使用的进程的详细信息所在目录
1     1790 1922 2049 2083 8            fs          meminfo     swaps
10    1799 1923 2056 2108 9            ide         misc        sys
11    1809 1924 2063 2111 apm          interrupts modules     sysvipc
1491 1818 1925 2065 2138 bus          iomem       mounts      tty
1550 1829 1968 2067 2162 cmdline      ioports     mtrr        uptime
1554 1893 1969 2069 2163 cpuinfo      irq         net         version
1572 19    1978 2071 3     devices      kcore       partitions
1591 1902 2     2073 4     dma          kmsg        pci
1670 1911 2032 2074 5     driver       ksyms       scsi
1720 1919 2043 2079 6     execdomains loadavg     self
1757 1920 2045 2081 7     fb           locks       slabinfo
1771 1921 2047 2082 77    filesystems mdstat      stat
#cd 2108                        //切换到2108目录,以方便详细的查看进程信息
#ls                             //列出进程详细的状态信息文件
cmdline cwd environ exe fd maps mem mounts root stat statm status

在这些文件当中,status这个状态文件是比较重要的,包含了很多关于进程的有用的信息,用户可以从这个文件获得信息,如下为列出该文件内容的操作:

#cat status                     //使用cat命令列出status文件内容
Name:   calculate               //进程名
State: R (running)             //进程运行状态
Tgid:   2108                    //进程组ID
Pid:    2108                     //进程ID
PPid:   2083                    //父进程ID
TracerPid:      0                //跟踪调试进程ID
Uid:    0       0       0       0   //进程所对应程序的UID
Gid:    0       0       0       0   //进程所对应程序的GID
FDSize: 256                     //进程使用文件句柄大小
Groups: 0 1 2 3 4 10 10         //组信息
//进程所使用的虚拟内存以及实际内存、信号机制方面的信息
VmSize:     1344 kB
VmLck:         0 kB
VmRSS:       224 kB
VmData:       12 kB
VmStk:        16 kB
VmExe:         4 kB
VmLib:      1292 kB
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 8000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff

这样,我们就可以知道进程使用的虚拟内存、以及实际内存、信号机制方面的信息了。
















本文转自samsunglinuxl51CTO博客,原文链接: http://blog.51cto.com/patterson/466729,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀“d“
Qt .pro文件之defineReplace函数的用法,实现lib文件名自动添加后缀“d“
38 0
【转】Android下使用Properties文件保存程序设置
原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码。    读取.properties文件中的配置:  String strValue = "";  Properties props = new Properties();  try {      props.
600 0
Spring Boot四:配置文件详解properties
一.配置随机数,使用随机数 在application.properties文件添加配置信息 #32位随机数 woniu.secret=${random.value} #随机整数 woniu.number=${random.
1763 0
Maven项目中无法找到 xml文件或 properties文件等配置文件的解决方法
在初次使用 Maven 项目的时候总是会遇到一些比较奇异的问题 就比如说总是会报错:项目里的 **.xml 或 **.properties 配置文件无法找到 这时你去项目中的 classes 生成文件(target 或 out)中找,确实这些配置文件没有被编译 这是因为 ...
1422 0
【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
原文:【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
2249 0
[20121227]v$datafile访问是从数据文件获取信息吗.txt
[20121227]v$datafile访问是从数据文件获取信息吗.txt记得以前开始学习oracle的时候,被问及访问v$datafile从哪里获取信息,当时想都没想,从数据文件.
678 0
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载