简单案例教你用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,如需转载请自行联系原作者



相关文章
|
7月前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
138 0
|
3月前
|
关系型数据库 MySQL
MySQL查看连接数和进程信息
这篇文章介绍了如何在MySQL中查看连接数和进程信息,包括当前打开的连接数量、历史成功建立连接的次数、连接错误次数、连接超时设置,以及如何查看和终止正在执行的连接进程。
697 10
|
1月前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
85 8
|
1月前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
90 1
|
3月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
198 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
3月前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【9月更文挑战第13天】在编程的世界中,进程间通信(IPC)如同一场精彩的社交舞会,每个进程通过优雅的IPC机制交换信息,协同工作。本文将带你探索Python中的IPC奥秘,了解它是如何让程序实现无缝信息交流的。IPC如同隐形桥梁,连接各进程,使其跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存及套接字,适用于不同场景。通过一个简单的队列示例,我们将展示如何使用`multiprocessing.Queue`实现进程间通信,使程序如同社交达人般高效互动。掌握IPC,让你的程序在编程舞台上大放异彩。
29 3
|
4月前
|
人工智能 PyTorch 算法框架/工具
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
【8月更文挑战第6天】Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程
|
3月前
|
缓存 运维 NoSQL
使用 psutil 获取硬件、网络以及进程信息
使用 psutil 获取硬件、网络以及进程信息
62 0
|
3月前
|
NoSQL
gdb中获取进程收到的最近一个信号的信息
gdb中获取进程收到的最近一个信号的信息
|
4月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?