我怎样才能知道一个进程已经打开的文件?

我有一个守护进程,我想知道它打开了什么文件(最好是CWD是什么)。 有没有可以告诉我的shell命令?

我非常喜欢lsof ,但是我认为对于这样一个简单的问题来说这太过分了。 /proc文件系统包含你想知道的一切。 也许一个例子是最好的:

 #ps ax | grep tail
  7196 pts / 4 S + 0:00 tail -f / var / log / messages
  8773 pts / 0 R + 0:00 grep尾巴
 #ls -l / proc / 7196 / cwd
 lrwxrwxrwx 1 insyte insyte 0 2009-07-29 19:05 / proc / 7196 / cwd  - > / home / insyte
 #ls -l / proc / 7196 / fd
总计0
 lrwx ------ 1 insyte insyte 64 2009-07-29 19:05 0  - > / dev / pts / 4
 lrwx ------ 1 insyte insyte 64 2009-07-29 19:05 1  - > / dev / pts / 4
 lrwx ------ 1 insyte insyte 64 2009-07-29 19:02 2  - > / dev / pts / 4
 lr-x ------ 1 insyte insyte 64 2009-07-29 19:05 3  - > / var / log / messages

因此,您可以看到/proc/$PID目录包含一个名为“cwd”的符号链接,该链接链接进程的CWD。 /proc/$PID/fd列出的打开的文件描述符也是如此。

/proc/$PID层次结构包含大量有关所有正在运行的进程的信息。 值得一提!

如果你有命令lsof可用[大多数* nix口味],你可以使用:

 lsof -p NNN 

列出按进程NNN打开的文件。 我有一段时间没有使用BSD,但是从内存fuser是一个接近平行于lsof。

我不知道一个命令来find一个进程的cwd ,但在Linux上,cwd被链接到进程的/ proc目录中。 的/ proc / NNN / CWD。

如果你知道进程的PID,你可以发出一个

 lsof | grep YOURPID 

快速和容易记住。

要么

 lsof -c yourprogramexecutable 

如果安装在您的系统上,请试试lsof

d