如何判断进程打开了哪些文件?

Den*_*ssy 7 linux files ubuntu process

我有一个守护进程,我想知道它打开了哪些文件(理想情况下它的 CWD 是什么)。有什么shell命令可以告诉我吗?

Ins*_*yte 18

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

# ps ax|grep 尾
 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层次结构包含了大量有关所有正在运行的进程的信息。值得一试!


Dis*_*ard 13

如果您有可用的命令lsof [whcih 大多数 *nix 风格都可以],您将使用:

lsof -p NNN
Run Code Online (Sandbox Code Playgroud)

列出进程 NNN 打开的文件。我有一段时间没有使用 BSD,但使用内存融合器它与 lsof 非常相似。

我不确定有什么命令可以找到进程的cwd,但在 Linux 上 cwd 被符号链接到进程的 /proc 目录中,即。/proc/NNN/cwd.