ps
命令:,1. 使用 ps -ejH
以树状结构显示进程层级,包含进程组ID(PGID)。,2. 使用 ps -o pid,pgid,cmd
直接列出进程ID、组ID及命令,清晰查看分组关系。在Linux系统中,进程组(Process Group)是一组相关联进程的集合,通常由同一个父进程创建,用于实现作业控制(如终端信号的分发),查看进程组有助于分析进程间的协作关系、资源分配或排查问题,以下是几种专业且实用的查看方法:
使用 ps
命令
ps
是最常用的进程查看工具,通过添加特定参数可显示进程组信息。
命令示例:
ps -eo pid,pgid,ppid,comm,args --sort pgid
参数解析:
-eo
:自定义输出列(pid
=进程ID,pgid
=进程组ID,ppid
=父进程ID,comm
=命令名,args
=完整命令)。--sort pgid
:按进程组ID排序。
输出示例:
PID PGID PPID COMMAND ARGS 1234 1234 5678 bash /bin/bash 5678 1234 9012 node /usr/bin/node app.js
说明:
- 同一进程组(
PGID
相同)的进程属于同一组。 - 进程组ID通常等于组内第一个进程(组长进程)的PID。
结合 pstree
查看层级关系
pstree
以树形结构展示进程关系,直观体现进程组嵌套。
命令示例:
pstree -g -p
参数解析:
-g
:显示进程组ID(PGID)。-p
:显示进程PID。
输出示例:
systemd(1)─┬─sshd(1234,1234)───bash(5678,1234)───node(9012,1234) └─crond(4321,4321)
说明:
- 括号内格式为
(PID, PGID)
。 - 此例中
sshd
、bash
、node
同属PGID1234
,crond
独立成组(PGID=4321)。
查看 /proc
文件系统
Linux的 /proc
目录存储实时进程信息,直接读取文件获取原始数据。
操作步骤:
cat /proc/<PID>/status | grep -i pgid
示例(查看PID为5678的进程组ID):
cat /proc/5678/status | grep -i pgid
输出:
NSpgid: 1234 # 进程组ID
说明:
- 需替换
<PID>
为目标进程的实际ID。 - 适合脚本自动化处理,但需手动定位进程。
使用 pgrep
检索特定进程组
通过进程名反向查找组内所有成员。
命令示例:
pgrep -g <PGID> -l
示例(查找PGID=1234的所有进程):
pgrep -g 1234 -l
输出:
5678 bash 9012 node
说明:
-l
显示进程名,省略则仅输出PID。- 需提前知道目标PGID(可通过
ps
获取)。
终端会话组:ps
结合 tty
针对终端关联的进程组(如SSH会话),筛选特定终端:
ps -t tty1 -o pid,pgid,comm
输出:
PID PGID COMMAND 5678 1234 bash 9012 1234 node
说明:
-t tty1
指定终端设备(通过who
或tty
命令查看当前终端)。
应用场景与建议
- 快速概览:优先使用
ps --sort pgid
或pstree -g
。 - 精准检索:已知PGID时用
pgrep -g
。 - 脚本处理:读取
/proc/<PID>/status
。 - 权限要求:普通用户可查看自身进程,
root
可查看系统所有进程组。
安全提示:
- 操作生产环境前,建议在测试环境验证命令。
- 避免随意终止进程组(如
kill -9 -<PGID>
),可能导致服务异常。
引用说明:
- Linux
man
手册(命令原生文档):man ps
,man pstree
,man proc
。 - 符合POSIX标准进程管理规范(IEEE Std 1003.1)。
- 基于Linux内核5.0+版本验证(/proc文件系统结构)。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39699.html