如何通过命令行过滤top结果,仅显示httpd和php-cgi进程?
实现top命令过滤特定进程(非交互式)
方法1:修正grep正则匹配
你之前的grep写法有误,应该用扩展正则匹配两个目标命令,同时可以加-w参数匹配整词,避免误匹配包含这些字符串的其他进程:
top -b -n 1 | grep -E -w 'php-cgi|httpd'
如果top输出的命令列带完整路径(比如/usr/sbin/httpd),可以调整正则忽略路径,只匹配命令名后缀:
top -b -n 1 | grep -E '(php-cgi|httpd)$'
方法2:用top内置过滤参数(更精准)
top支持命令行直接指定过滤规则,结合pgrep获取目标进程的PID列表,传给top的-p参数即可只显示对应进程:
top -b -n 1 -p $(pgrep -d',' php-cgi httpd)
解释:pgrep -d',' php-cgi httpd会把所有php-cgi和httpd的PID用逗号分隔,作为top -p的参数,让top仅展示这些PID对应的进程。
方法3:用ps命令替代(脚本场景更简洁)
如果只是获取进程状态信息,ps命令比top更适合脚本环境,写法更直观:
ps aux | grep -E -w 'php-cgi|httpd' | grep -v grep
或者直接用pgrep配合ps输出进程详情:
ps aux $(pgrep php-cgi httpd)
内容的提问来源于stack exchange,提问作者Muhammad Fahad
相关产品推荐
相关产品推荐

