作为标题,我想找到在特定工作目录中运行的所有进程。
首先,我认为我可以使用这种方法:


使用ps列出所有进程
在上面的pid列表中使用pwdx获取工作目录列表
检查工作目录列表的结果,然后与特定工作目录进行比较。


但是我认为这很笨拙,有没有更好的解决方案?

最佳答案

在Python中实现从Shell函数调用的核心逻辑(因此只需要一个进程,而不是使用一堆单独的工具):

pids_for_dir() {
  python - "$@" <<'EOF'
import sys, os.path, glob
target = os.path.abspath(sys.argv[1])
for name in glob.glob("/proc/*/cwd"):
  if os.path.abspath(name) == target:
    print(name.split('/')[-2])
EOF
}


...从您的外壳调用为:

pids_for_dir /tmp

10-07 15:58