我有 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/