linux文件之/proc/[pid]/status文件

叶sir学编程 2024-07-19 09:30:39

在linux系统中,/proc/[pid]/status文件是一个特殊且非常重要的文件,该文件保存的都是对应进程PID的进程信息,包括进程所使用的内存大小,进程当前的状态优先级等,这些信息都是由系统内核动态生成的,因此在某种情况下,也表示当前系统的资源情况。

如图1和图2,是status文件里所包含的字段参数,每个字段都有其特定的含义:

图1

图2

字段说明

Name表示当前进程的名称;

Umask表示进程创建文件时,初始设置的掩码,用于确定文件的默认权限,默认为0022;

State表示进程的状态;

Sleeping(S)表示等待状态,此时进程处于阻塞状态;

Running(R)表示进程正在运行或者等待运行;

Disk sleep(D)表示正在等待IO操作;

Zombie(Z)表示进程已中止,但是父进程还没中止,即所谓的僵尸进程;

tracing stop(T)表示进程已经停止,接收到SIGSTOP,SIGTSTP信号,或者进程正在被跟踪,即gdb调试;

TGID表示进程的PID,也叫线程组ID;

Ngid表示组ID;

Pid表示进程ID;

PPid表示该进程所属父进程的ID;

TracerPid表示当进程被gdb调试跟踪时,该跟踪进程的PID;

Uid表示进程的用户标识符;

Gid标识用户组标识符;和Uid一样有四组数据,分别表示实际用户ID(RUID),有效用户ID(EUID),保存设置的用户ID(SUID),文件系统ID(FSUID);

FDSize表示进程所打开的文件描述符的数量;

Groups表示进程所属附加组;

NStgid通常为进程PID;

NSpid通常为进程PID;

VmPeak表示进程在运行过程中,所占用内存的峰值,单位为KB;

VmSize表示进程正在使用的内存;

VmLck表示被进程锁定的内存大小,其作用时为了方便内存调度使用;

VmPin表示固定内存;

VmHWM表示程序分配的物理内存的最大值;

VmRSS表示当前进程正在使用的物理内存;

RssAnon表示当前进程使用匿名内存的页数;

RssFile表示进程在文件系统中所占用的内存大小;

RssShmem表示进程的共享内存的大小;

VmData表示进程数据段的大小,包括程序的可执行代码,全局变量等,单位为KB;

VmStk表示进程堆栈段的大小,单位为KB;

VmExe表示进程代码的大小,单位为KB;

VmLib表示进程使的库地址空间的大小,单位为KB;

VmPTE表示进程页表占用的内存大小;

VmSwap表示进程所用的交换空间的大小;

HugetlbPages表示进程所使用的大页内存的数量;

CoreDumping表示进程是否正在写入核心转储文件,1表示正在写入,表示没有发生核心转储;

Threads表示当前进程的线程数量,最小值为1;

SigQ表示当前进程待处理的信号数,/左侧数据表示待处理的数量,/右侧表示最大数量;

实例

监测VmData字段的数据变化,VmData字段表示的是全局变量的大小,因此可以编写一个程序,使用malloc函数反复分配一定大小的空间给一个全局指针,然后实时监测VmData字段,如图:

图3

为了更方便快速的查看vmData字段的数据变化,示例程序中使用malloc函数之后,没有调用free函数进行释放,但是在实际开发中,malloc和free需要同时使用,否则会发生内存泄露。

0 阅读:0

叶sir学编程

简介:感谢大家的关注