linux进程监控脚本(/proc/$pid/status)

本文介绍了一个使用shell脚本监控Linux进程的方法,通过读取/proc/$pid/status文件,定期记录指定PID的进程信息,适用于包括嵌入式环境在内的各种场景。脚本提供了参数选项,可设置监控间隔时间和日志文件名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程信息监控:除free top外,最靠谱的就是 /proc/$pid/status,该文件会实时记录进程的
内存占用、文件占用、信号处理等各种资源占用状况,具体内容看参照相关文档


下面的源码主要是实现了一个进程监控脚本,定时记录给定pid进程的信息,以供后期分析
为考虑可移植性即嵌入式环境的使用,脚本没有采用外部的命令

[root@linux mem_monitor]# cat process_monitor.sh 

#!/bin/sh
#process_monitor.sh monitor a process  statics by pid 


#Copyright (C) <2013> Jiancheng Li
#Written by Jiancheng Li ,August 2013.
#e-mail:jiancheng.leei@gmail.com    
     


#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.


#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS
Linux 系统中,`/proc/[pid]/status` 文件提供了与特定进程(由 `[pid]` 表示)相关的详细状态信息。该文件以可读文本格式呈现,包含了进程的运行状态、资源使用情况、内存信息、权限标识符等关键内容。 以下是 `/proc/10588/status` 文件中常见字段的解析: ### 进程状态信息 - **Name**: 表示进程的名称,通常是启动该进程的可执行文件的名称。 - **State**: 表示进程当前的状态,常见的状态包括: - `R (running)`:正在运行或在运行队列中等待。 - `S (sleeping)`:处于可中断睡眠状态。 - `D (disk sleep)`:处于不可中断睡眠状态,通常等待 I/O 操作完成。 - `Z (zombie)`:僵尸进程,已经终止但尚未被父进程回收。 - `T (stopped)`:进程被停止,通常是由于收到 SIGSTOP 或 SIGTSTP 信号。 - `t (tracing stop)`:进程被调试器暂停。 - `X (dead)`:死亡状态,进程已终止并即将被销毁。 - **Tgid**: 表示线程组标识符(Thread Group ID),通常与主进程PID 相同。 - **Ngid**: 表示 NUMA 组标识符,如果没有设置 NUMA,则为 0。 - **Pid**: 表示进程PID。 - **PPid**: 表示父进程PID。 ### 资源使用信息 - **TracerPid**: 表示正在跟踪该进程的调试器的 PID。如果为 0,则表示没有调试器在跟踪该进程。 - **Uid**: 表示进程所有者的用户标识符,包括真实 UID(Real UID)、有效 UID(Effective UID)、保存 UID(Saved UID)和文件系统 UID(Filesystem UID)。 - **Gid**: 表示进程的组标识符,包含真实 GID(Real GID)、有效 GID(Effective GID)、保存 GID(Saved GID)和文件系统 GID(Filesystem GID)。 - **FDSize**: 表示文件描述符表的大小,即进程可以打开的最大文件描述符数量。 ### 内存相关信息 - **VmPeak**: 表示进程使用的虚拟内存的峰值大小(单位为 KB)。 - **VmSize**: 表示进程当前使用的虚拟内存大小(单位为 KB)。 - **VmLck**: 表示被锁定在 RAM 中的内存大小(单位为 KB),这些内存不会被交换到磁盘[^5]。 - **VmPin**: 表示被固定在物理内存中的内存大小(单位为 KB),这些内存既不会被交换到磁盘,也不会被移动。 - **VmHWM**: 表示进程使用的物理内存的峰值大小(单位为 KB)。 - **VmRSS**: 表示进程当前使用的物理内存大小(单位为 KB)。 - **RssAnon**: 表示匿名内存的使用量(单位为 KB),这部分内存不与任何文件相关联。 - **RssFile**: 表示文件映射内存的使用量(单位为 KB),这部分内存与文件相关联。 - **RssShmem**: 表示共享内存的使用量(单位为 KB)。 ### 调度和优先级信息 - **Threads**: 表示进程中的线程数量。 - **SigQ**: 表示当前队列中的信号数量以及系统支持的最大信号数量。 - **SigPnd**: 表示进程挂起的信号掩码。 - **ShdPnd**: 表示共享挂起的信号掩码。 - **SigBlk**: 表示被阻塞的信号掩码。 - **SigIgn**: 表示被忽略的信号掩码。 - **SigCgt**: 表示被捕获的信号掩码。 - **CapInh**: 表示进程继承的能力掩码。 - **CapPrm**: 表示进程允许的能力掩码。 - **CapEff**: 表示进程有效的能力掩码。 - **CapBnd**: 表示进程边界能力掩码。 - **Seccomp**: 表示进程的 seccomp 模式,用于限制系统调用。 ### 示例代码 以下是一个简单的 Python 脚本,用于读取 `/proc/10588/status` 文件的内容并打印出来: ```python def read_proc_status(pid): with open(f"/proc/{pid}/status", "r") as status_file: status_content = status_file.read() return status_content # 读取进程 ID 为 10588 的状态信息 proc_status = read_proc_status(10588) print(proc_status) ``` 运行该脚本后,输出将显示 `/proc/10588/status` 文件的内容,包含进程的详细状态信息。 通过解析 `/proc/10588/status` 文件,用户可以获取进程的运行状态、资源使用情况、内存信息、权限标识符等重要数据。这对于系统监控、调试和性能调优非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值