关于ps仅显示父进程的用法及替代工具的技术咨询
ps仅显示父进程的用法及替代工具的技术咨询
看起来你想过滤掉postgres的子进程,只保留它的主进程,同时还想了解除ps之外的可行工具,我给你整理几个实用的方法:
一、用ps命令直接筛选目标进程
方法1:通过父进程PID精准筛选
postgres的主进程通常是由系统init进程(PID=1)启动的,我们可以直接基于这个条件过滤:
ps -C postgres --ppid 1 -o cmd --no-headers
参数解释:
-C postgres:指定只匹配postgres相关进程--ppid 1:限定父进程为PID=1的进程(也就是init)-o cmd:只输出进程的命令行内容--no-headers:去掉表头,直接得到你需要的那一行结果
方法2:通过进程启动顺序筛选
如果你的环境中postgres主进程的父进程不是1,也可以通过找最早启动的postgres进程(也就是主进程)来获取:
ps -p $(pgrep -o postgres) -o cmd --no-headers
这里pgrep -o postgres会返回postgres进程中启动最早的那个PID(也就是主进程),再用ps输出它的命令行即可。
二、除ps之外的替代工具
1. 使用pstree工具
pstree本身是用来展示进程树的,我们可以用它只提取postgres的主进程:
pstree -T -p $(pgrep -o postgres)
-T选项会让pstree只显示指定的进程本身,不展开它的子进程树,刚好符合你的需求。
2. 用pgrep配合xargs
pgrep可以直接筛选符合条件的进程PID,再结合xargs和ps输出命令行:
pgrep -P 1 postgres | xargs ps -o cmd --no-headers
这个逻辑和第一种ps方法类似,先找到父进程为1的postgres PID,再输出它的命令行。
备注:内容来源于stack exchange,提问作者palmasd1




