如何列出指定目录下所有运行进程的PID?
嘿,这个需求我经常碰到,给你分享几个实用的方法,包括优化你想到的那个命令,还有更简洁的替代方案:
方法1:优化你原本的命令
你一开始想到的思路没问题,但有个小坑——它可能会把grep自身的进程也列出来。加个排除项就能解决这个问题:
ps -eo pid,args | grep "/home/myname/myapp" | grep -v grep | awk '{print $1}' | tr '\n' ' '
简单拆解下每个部分的作用:
ps -eo pid,args:列出系统中所有进程的PID和完整命令行参数grep "/home/myname/myapp":筛选出命令行包含目标目录路径的进程grep -v grep:把执行grep的自身进程排除掉awk '{print $1}':提取输出结果里的第一列(也就是PID)tr '\n' ' ':把每个PID单独一行的格式转换成空格分隔的单行输出
方法2:用pgrep更高效实现
pgrep是专门用来查找进程PID的工具,用它来实现这个需求会更简洁,不需要组合多个命令:
pgrep -f "/home/myname/myapp"
如果希望结果像你原来的命令那样在一行用空格分隔,只需要再加个tr转换格式:
pgrep -f "/home/myname/myapp" | tr '\n' ' '
这里的-f参数是关键,它让pgrep匹配完整的命令行内容,而不是只匹配进程名,刚好适配我们按目录路径筛选的场景。
方法3:可选工具pids(部分系统可用)
有些Linux发行版会自带pids工具,它可以直接根据进程的路径来查找PID,用法超简单:
pids /home/myname/myapp
不过要注意,这个工具不是所有系统都预装的,所以前两个方法的通用性更强。
内容的提问来源于stack exchange,提问作者Nicholas DiPiazza
相关产品推荐
相关产品推荐

