我有一个守护进程,我想知道它打开了哪些文件(理想情况下,它的 CWD 是什么)。有没有 shell 命令可以告诉我这些?
答案1
我确实喜欢lsof
,但我认为对于像这样的简单问题来说,这有点过头了。/proc
文件系统包含您想知道的所有内容。也许最好举一个例子:
# ps ax|grep tail 7196 分/4 S+ 0:00 tail -f /var/log/messages 8773 pts/0 R+ 0:00 grep tail # 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
结构包含有关所有正在运行的进程的大量信息。值得一看!
答案2
如果你有命令lsof可用 [大多数 *nix 版本都具备此功能] 您可以使用:
lsof -p NNN
列出进程 NNN 打开的文件。我有一段时间没用过 BSD 了,但从记忆中定影器与 lsof 非常相似。
我不确定找到慢性肾脏病但在 Linux 上,cwd 符号链接到该进程的 /proc 目录,即 /proc/NNN/cwd。
答案3
如果你知道进程的 PID,你可以发出一个
lsof | grep YOURPID
快捷又容易记忆。
或者
lsof -c yourprogramexecutable
答案4
这也可能有帮助,使用 proc 文件系统您可以执行以下操作:
readlink proc_sample/proc/<YOUR_PID>/fd/*
不要忘记<YOUR_PID>
用所需的进程 ID 进行替换。