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/exe eg:
% 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 $pid This 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 5One way is ps -ef
3ps auxwwwe Source:
3lsof is an option. You can try something like below:
lsof -p PROCESS_ID This 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$' 1The 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###` 4You could use
readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe or
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