Linux - Find out the current working directory of a process?
If i have a process PID X, how can I find out what directory it was running in? I can see with ps aux | grep X
the full command line that it was invoked with. However in this case it's ./script.sh
, and I want to see which script.sh
it's running.
The problem with /proc/PID/exe
is that, for shell scripts, it shows the location of the shell. The problem with /proc/PID/cwd
is that is shows the current working directory of the process. If the process changes directories, that is reflected in the target of that symlink.
This will show what the $PWD was at the time the script was started (substitute the process ID you're interested in where you see "PID"):
procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir
or simply:
grep -az "\bPWD" /proc/PID/environ
This will show the command that started it so you can see if a relative or absolute directory was used:
proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd
or simply:
grep -az PROC_NAME /proc/PID/cmdline
Together, these should show you which script is being run. For one started with ./
all you need is procdir
.
There's a simpler answer, and that's to use pwdx
, as detailed here