如何查找所有以sh结尾的正在运行的Linux进程?
查找以"sh"结尾的运行进程的正确方法
你执行ps aux | grep "*sh"无效的核心原因有两个:
- Shell会优先解析
*sh这个通配符,如果当前目录存在类似xsh、mysh的文件,*sh会被替换成这些文件名,导致grep接收到错误的匹配参数; - Grep的正则语法里,
*代表“前面的字符出现0次或多次”,不是匹配任意字符的通配符,*sh的匹配逻辑完全不符合你的需求。
以下是几种可行的解决方法:
方法1:修正grep的正则匹配
用$锚定字符串结尾,明确匹配以sh结束的内容,同时过滤掉grep自身的进程:
ps aux | grep -E 'sh$' | grep -v grep
-E启用扩展正则,让$的锚定语法生效;grep -v grep用来排除执行grep命令本身的进程,避免干扰结果。
方法2:用pgrep直接查找(更简洁)
pgrep是专门用于查找进程的工具,结合正则可以快速定位目标进程:
# 只输出进程ID pgrep -f 'sh$' # 输出完整进程信息 ps aux $(pgrep -f 'sh$')
-f参数表示匹配完整的命令行,而不仅仅是进程名。
方法3:用awk直接过滤ps输出
awk可以直接处理ps的输出列,精准匹配进程名(ps aux的第11列是进程名):
ps aux | awk '$11 ~ /sh$/'
内容的提问来源于stack exchange,提问作者Lyprandos Liatsos
相关产品推荐
相关产品推荐

