Bash/Python 进程匹配

Bash/Python processes matching

我可以用

pgrep -f 'keyword1 | keyword2'

到 运行 pgrep 和 return 所有匹配任一关键字的进程。

我该如何使用 & 来执行此操作?我只想要包含两个关键字的进程

以下模式失败:

 pgrep -f 'keyword1 & keyword2'
 pgrep -f 'keyword2 && keyword2'

MAN pgrep(1)

OPTIONS

-f The pattern is normally only matched against the process name. When -f is set, the full command line is used.

.

附带问题: 是否有用于 运行ning 这些命令的内置 Python 库?我似乎找不到一个,每个人都建议使用 subprocess.Popen(),这就是我 运行 宁 'pgrep' 命令的方式,但是我更喜欢纯 Python解决方案(如果可用)

执行 grep 'and' 的典型方法是多次 grep。由于 pgrep returns pids 您必须直接过滤进程列表,然后提取 PID:

ps ax -o pid,cmd | grep 'keyword1' | grep 'keyword2' | awk '{print }'

我不确定你可以用 pgrep 做到这一点,但是你可以使用 awk:

ps ax -o pid,cmd | awk '{pid = ; =""}/[k]eyword1/ && /keyword2/ {print pid}'

我使用[k]eyword1的原因是为了避免匹配awk进程。

如果 pgrep 支持 PCRE,这样的东西会起作用:

pgrep -f '(?=.*keyword1)(?=.*keyword2)'

您可以使用 or 和通配符来反转模式,以任意顺序获取任一关键字。

pgrep -f 'keyword1.*keyword2|keyword2.*keyword1'