我需要根据进程的所有者和命令来获取进程的 pid。我可以使用“ps -u xxx”按用户过滤进程,使用“ps -C yyy”过滤其命令,但当我尝试“ps -u xxx -C yyy”时,它们会使用 OR 逻辑组合在一起。我需要 AND 逻辑。我该如何实现这一点?
答案1
使用 pgrep?
pgrep -U xxx yyy
它仅返回 pid(如果多个进程匹配,则返回 pids)。
答案2
使用 grep?
ps -u xxx | grep yyy | grep -v grep
答案3
你可以使用以下方法comm
来查找两种情况下共有的 PID:
ps -u xxx | sort > /tmp/ps-uxxx
ps -C yyy | sort > /tmp/ps-Cyyy
comm -1 -2 /tmp/ps-uxxx /tmp/ps-Cyyy
使用 bash,您可以使用进程替换来避免使用临时文件:
comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
答案4
对于那些需要即时实现这一目标(无需脚本)的人来说,这里有一个更简单的方法。
ps -fp $(pgrep -d, -U theUser theCommand)