关于使用ps命令获取进程快照时排除指定进程的技术咨询
使用ps命令获取进程快照时排除指定进程的技术咨询
嘿,我来帮你搞定这个需求!要获取当前进程的快照,同时排除Docker相关的进程(包括docker本身、containerd和containerd-shim-runc-v2),这里有几个实用的方法,你可以根据自己的使用习惯选择:
方法一:结合ps和grep反向排除
这是最通用的方式,几乎所有Linux系统都支持:
ps aux | grep -vE '(docker|containerd|containerd-shim-runc-v2)'
简单解释一下各个部分的作用:
ps aux:列出所有用户的所有进程,包含进程用户、PID、CPU/内存占用等详细信息grep -v:反向匹配,也就是把符合后续规则的行从结果里排除掉-E:启用扩展正则表达式,这样我们可以用|来分隔多个要排除的进程名称
不过要注意,这个命令可能会把执行grep的自身进程也列出来,如果你想把它也排除,可以稍微修改一下:
ps aux | grep -vE '(docker|containerd|containerd-shim-runc-v2|grep)'
方法二:使用ps的--exclude参数(推荐,部分系统支持)
如果你用的是较新的procps-ng版本(大部分现代Linux发行版比如Ubuntu、CentOS 8+都默认使用这个),可以直接用ps自带的--exclude参数,写法更简洁直观:
ps aux --exclude comm='docker' --exclude comm='containerd' --exclude comm='containerd-shim-runc-v2'
这里的comm指的是进程的命令名,直接指定要排除的进程名称即可,不需要写正则表达式,出错概率更低。
方法三:用pgrep配合ps精准排除PID
如果想要更精准地排除进程(比如避免因为进程名包含关键字而误排除),可以先通过pgrep找出目标进程的PID,再用ps排除这些PID:
ps aux | grep -v "^$(pgrep -d '|' -x docker containerd containerd-shim-runc-v2)"
解释一下:
pgrep -x:精确匹配进程名称,不会匹配那些名称包含这些关键字的其他进程-d '|':用竖线分隔找到的多个PID,方便后续grep匹配^:确保只匹配行首的PID,避免误排除其他包含这些数字的进程
备注:内容来源于stack exchange,提问作者palmasd1
相关产品推荐
相关产品推荐

