进程中打开了哪些文件

进程中打开了哪些文件

在 Linux 系统中,我想获取特定进程在其生命周期内打开(读取或写入)的所有文件的列表。从开始到结束,他的生命周期可能长达几个小时。

我不想调试内核。

我不介意使用类似这样的模拟程序http://valgrind.org/

我尝试使用 lsof,但我不确定是否列出了所有曾经打开过的文件。

答案1

您可以使用斯特拉斯

strace -e open command

例子:

$ strace -e 打开谁
打开(“/etc/ld.so.cache”,O_RDONLY) = 3
打开(“/lib/libc.so.6”,O_RDONLY)= 3
打开(“ / usr / lib / locale / locale-archive”,O_RDONLY)= 3
打开(“/var/run/utmp”,O_RDONLY|O_CLOEXEC) = 3
打开(“/usr/lib/gconv/gconv-modules.cache”,O_RDONLY)= 3
打开(“/etc/localtime”, O_RDONLY) = 3
cyrus 控制台 2011-12-08 15:34 (:0)
cyrus :0 2​​011-12-08 15:34

答案2

1 条建议...阅读手册页。特别查看 lsof 的“-p”参数。

    -p s     This option excludes or selects the listing of  files  for  the
             processes

“s” 是进程 ID,即你正在谈论的进程。你可以用下面的简单命令获取它:

ps ax |grep yourprocessname

并抓住第一个数字。然后简单地做一个

lsof -p your-snagged-number

瞧!所有文件均由进程使用。

不,它只包含当前打开的文件。 strace 可能是一个更好的选择……但要复杂得多。

答案3

如果您的系统中安装了 strace,您可以使用它来执行该任务:

strace -o strace.log <Your command>

在生成的日志文件中,您可以 grep “open(” 来查找已打开的任何文件。您还可以 grep 您可能感兴趣的其他内容,例如文件读取/写入、网络访问和其他活动。

相关内容