If I have multiple copies of the same application on the disk, and only one is running, as I can see with ps, how can I know the absolute path to distinguish it from the others?
8 Answers
% sudo ls -l /proc/PID/exeeg:
% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -> /package/admin/daemontools-0.76/command/supervise2
Use:
pwdx $pidThis gives you the current working directory of the pid, not its absolute path.
Usually the which command will tell you which is being invoked from the shell:
#> which vlc
/usr/bin/vlc 5 One way is ps -ef
3ps auxwwweSource:
3lsof is an option. You can try something like below:
lsof -p PROCESS_IDThis will list all the files opened by the process including the executable's actual location. It is then possible to add a few more awk, cut, grep etc. to find out the information that you are looking for.
As an example, I executed the following commands to identify where my 'java' process came from:
lsof -p 12345 | awk '{print $NF}' | grep 'java$' 1 The quick answer is to use ps with options or the /proc filesystem info. That will usually work, but is not guaranteed. In general, there is no definite, guaranteed answer. For instance, what if the executing file is deleted during execution, so that there is no path to the file?
See the Unix FAQ for a little more detail, particularly questions 4.3 and 4.4.
Why does everyone expect you to know the PID? Here's the human-friendly way:
pwdx `pgrep ###process_name###` 4 You could use
readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exeor
find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"to get the absolute path of APP_NAME running as current user.
2