如何从/proc/[pid]/status中仅读取指定的进程状态数据
提取指定PID进程的名称与状态
要从/proc/<PID>/status文件里提取进程名称(Name)和状态码(State的单个字母),可以用grep配合awk或者cut精准截取内容,下面是修改后的完整脚本:
pids=$(pidof firefox) # 获取所有firefox进程的PID for pid in ${pids[*]} do # 从/proc/$pid/status中提取进程名称 proc_name=$(grep "^Name:" /proc/$pid/status | awk '{print $2}') # 提取状态码(括号前的单个字母,比如S/R/D) proc_state=$(grep "^State:" /proc/$pid/status | awk '{print $2}') # 格式化输出 echo "PID: $pid | Name: $proc_name | Status: $proc_state" done
关键逻辑说明
grep "^Name:" /proc/$pid/status:精准匹配以Name:开头的行,避免误匹配其他包含Name的行awk '{print $2}':截取该行的第二个字段,也就是冒号后的进程名称/状态码- 状态提取时,
State:行的第二个字段就是你需要的单个状态字符(D/R/S/T/Z),括号后的描述可直接忽略
替代写法(用cut命令)
如果习惯用cut,也可以这么实现:
proc_name=$(grep "^Name:" /proc/$pid/status | cut -d' ' -f2) proc_state=$(grep "^State:" /proc/$pid/status | cut -d' ' -f2)
注意事项
- 确保当前用户有读取
/proc/$pid/status的权限,普通用户一般能读取自己的进程,系统进程可能需要sudo - 如果
pidof返回空(比如firefox未运行),循环会直接跳过,不会报错
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

