首页 > 解决方案 > 列出在给定目录中运行的进程

问题描述

我正在处理一个应用程序,它提出了许多单独的进程,当礼貌地询问时,其中一些有时不会消失——通过使用应用程序自己的方式。

这意味着,他们必须被粗鲁地驱逐(用SIGTERM),然后,对于特别顽固的人——残酷地(用SIGKILL)。

麻烦的是找到它们...你如何列出所有进程,考虑给定目录 - 或其子目录 - 它的工作目录(cwd)?

我能想到的最好方法是调用:lsof -b -w -u $(whoami),然后解析最后一列以查找我的目录,然后PID通过sort -u.

有没有更好的?

标签: linuxunixpsgetcwd

解决方案


如果您只关心工作目录,则可以使用awk来测试输出的第 4 列是否为cwd. 并且awk还可以检查最后一列,看看它是否在你关心的目录中。

procs=$(lsof -b -w -u $(whoami)  | awk '$4 == "cwd" && $NF ~ /^\/path\/to\/directory(\/|$)/ { print $2 }')

由于每个进程只有一个cwd引用,因此您不需要使用sort -u删除重复项。


推荐阅读