如何获取从指定文件夹启动的进程PID?
如何找出从指定文件夹启动的所有进程PID
当然有办法啦!正好有几个实用的方法可以帮你实现pwdx的反向操作——从指定文件夹路径找出所有关联的进程PID,下面给你详细说说:
方法1:用lsof快速过滤
lsof是列出系统打开文件的工具,我们可以用它筛选出**当前工作目录(cwd)**是目标文件夹的进程:
# 列出所有当前工作目录为目标路径的进程,包含PID和其他信息 lsof -d cwd | grep "/path/to/your/folder" # 如果只想提取去重后的PID,再加一步处理 lsof -d cwd | grep "/path/to/your/folder" | awk '{print $2}' | sort -u
-d cwd:指定只关注进程的当前工作目录sort -u:避免同一个进程被重复列出(有些场景下lsof会多次显示同一个PID)
方法2:直接遍历/proc文件系统(无需额外工具)
Linux系统的/proc目录下每个数字命名的文件夹对应一个进程,其中cwd是指向进程当前工作目录的符号链接。我们可以写个简单的shell脚本来遍历匹配:
TARGET_FOLDER="/path/to/your/folder" for pid in /proc/[0-9]*; do # 跳过非进程目录(理论上不会出现,但做个判断更稳妥) [ -d "$pid" ] || continue # 获取进程当前工作目录的绝对路径,忽略错误输出 current_cwd=$(readlink -f "$pid/cwd" 2>/dev/null) # 对比路径,匹配则输出PID if [ "$current_cwd" = "$TARGET_FOLDER" ]; then echo "${pid##*/}" fi done
这个方法的优势是不需要安装lsof,完全依赖系统自带的工具,适合轻量化环境。
方法3:用ps命令组合筛选
ps命令可以直接输出进程的当前工作目录,结合grep和awk就能提取PID:
# 输出PID和对应进程的当前工作目录,再过滤目标路径 ps -eo pid,cwd | grep "/path/to/your/folder" | awk '{print $1}'
-eo pid,cwd:指定输出列为PID(进程ID)和CWD(当前工作目录)- 如果目标路径包含空格,记得给路径加上引号,比如
grep "/path/with spaces/folder"
注意事项
- 如果目标文件夹是符号链接,记得用
readlink -f转换成绝对路径再匹配,避免因为链接路径不一致导致漏匹配 - 有些进程可能会在启动后切换工作目录,这些进程不会被匹配到——我们找的是当前工作目录为目标文件夹的进程,和启动目录是同一个概念(除非进程主动切换了cwd)
内容的提问来源于stack exchange,提问作者Dominika
相关产品推荐
相关产品推荐

