7

I have a daemon process and I want to know what files it has open (and ideally what its CWD is). Is there any shell command that can tell me that?

Amandasaurus
  • 31,471
  • 65
  • 192
  • 253
Denis Hennessy
  • 173
  • 1
  • 5

5 Answers5

18

I do love lsof, but I think it's overkill for a simple question like this. The /proc filesystem contains everything you want to know. Perhaps an example would be best:

# ps ax|grep tail
 7196 pts/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
total 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

So as you can see, the /proc/$PID directory contains a symlink called "cwd" that links the the CWD of the process. The same is true for the open filedescriptors listed in /proc/$PID/fd.

The /proc/$PID hierarchy contains a wealth of information about all running processes. Worth poking around in!

Insyte
  • 9,394
  • 3
  • 28
  • 45
13

If you have the command lsof available [whcih most *nix flavors do] you would use:

lsof -p NNN

to list files open by process NNN. I haven't used BSD in a while but from memory fuser is a close parallel to lsof.

I'm not sure of a command to find the cwd of a process but on Linux cwd is symlinked into the /proc directory of the process ie. /proc/NNN/cwd.

DisabledLeopard
  • 812
  • 6
  • 9
  • 1
    On Ubuntu, lsof comes with the lsof package. I don't think that it's installed by default. – innaM Jul 30 '09 at 07:55
4

if you know the processes PID, you can just issue an

lsof | grep YOURPID

Quick and easy to remember.

or

lsof -c yourprogramexecutable
Sven
  • 98,649
  • 14
  • 180
  • 226
2

Try lsof if it's installed on your system

D

dimitri.p
  • 657
  • 3
  • 9
0

This may also help, using proc file-system you can do:

readlink proc_sample/proc/<YOUR_PID>/fd/*

Don't forget to replace <YOUR_PID> with the desired process id.

Dave M
  • 4,514
  • 22
  • 31
  • 30
therealak12
  • 105
  • 4