bash - lsof 应该为一组 pids 提供所有打开的文件

标签 bash shell scripting freebsd lsof

我有 30 个进程实例在服务器上运行,我想记录每个进程的打开文件以供分析。

我运行了以下命令:

* ps auwwx | grep PROG_NAME | awk '{print $2}' | xargs lsof -p | less

它提示说,“lsof: status error on : No such file or directory”

但是,如果我运行 lsof -p < pid >它为我提供了该进程的打开文件列表。我怎样才能获得 FreeBSD 机器上所有 30 个进程实例的所有打开文件的列表。

此外,我不想列出共享库。如果我这样做 -d "^txt"它没有显示我想显示的其他一些数据库文件。有没有其他方法可以 grep 出 .so 文件?

最佳答案

lsof -p 选项采用逗号分隔的 PID 列表。您使用 xargs 的方式会将 pids 作为单独的参数传递,导致一些被解释为文件名。

尝试 lsof -p $(your grep | tr '\012' ,) 这将有一个尾随逗号,我不确定 lsof 是否会关心但如有必要,您可以 sed 关闭它。

关于bash - lsof 应该为一组 pids 提供所有打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468629/

相关文章:

regex - 如何使用 sed 替换配置文件的变量?

linux - grep while read 行替代

linux - 根据存在的命令终止 Linux 进程

linux - 分别合并来自不同子目录的 jpg 并将它们保存到一个文件夹中

bash - 更新 bash 函数中的变量并在提示符中使用它 (PS1)

Linux 脚本为 mediawiki 创建 wiki 文件

cocoa - 如何在紧密循环中检查命令周期?

在 for 循环中使用 awk 的 Bash 脚本

bash - 如何在终端窗口的底部显示文本,并让它留在 Bash 中?

bash - 处理通过管道传输到 netcat 的脚本的输入