linux - 列出在给定目录中运行的进程
问题描述
我正在处理一个应用程序,它提出了许多单独的进程,当礼貌地询问时,其中一些有时不会消失——通过使用应用程序自己的方式。
这意味着,他们必须被粗鲁地驱逐(用SIGTERM
),然后,对于特别顽固的人——残酷地(用SIGKILL
)。
麻烦的是找到它们...你如何列出所有进程,考虑给定目录 - 或其子目录 - 它的工作目录(cwd
)?
我能想到的最好方法是调用:lsof -b -w -u $(whoami)
,然后解析最后一列以查找我的目录,然后PID
通过sort -u
.
有没有更好的?
解决方案
如果您只关心工作目录,则可以使用awk
来测试输出的第 4 列是否为cwd
. 并且awk
还可以检查最后一列,看看它是否在你关心的目录中。
procs=$(lsof -b -w -u $(whoami) | awk '$4 == "cwd" && $NF ~ /^\/path\/to\/directory(\/|$)/ { print $2 }')
由于每个进程只有一个cwd
引用,因此您不需要使用sort -u
删除重复项。
推荐阅读
- c++ - 来自 void 的多态铸造*
- php - Laravel nova 资源更新/创建忽略模型连接
- android - TabView 中 Fragment 的 OnCreateView 中的 LoadData() 调用两次
- reactjs - React event.target.value 正在重新调整 undefined
- javascript - 表单验证中未解决的承诺
- javascript - 事件侦听器看不到 div#id 元素并与之合作
- wpf - 按控件类型查找资源的 FindResource 等价物是什么?
- list - 如何创建一个包含 n 个过程应用程序的列表
- javascript - 从数组中提取最后 n 个元素而不干扰原始数组
- javascript - 更改 Redux 中的存储