it-swarm-ru.tech

Как я могу узнать абсолютный путь запущенного процесса?

Если у меня есть несколько копий одного и того же приложения на диске, и запущена только одна, как я могу видеть с помощью ps, как мне узнать absolute путь, чтобы отличить его от других?

91
Jader Dias
% Sudo ls -l /proc/PID/exe

например:

% 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 корневой корень 0 фев 1 18:05/proc/24466/exe ->/package/admin /daemontools-0.76/command/supervise
107
akira

Использование:

pwdx $pid

Это дает вам текущий рабочий каталог pid, а не его абсолютный путь.

Обычно команда which сообщит вам, что вызывается из командной консоли:

#> which vlc
/usr/bin/vlc
16
seenu

Одним из способов является ps -ef

13
fpmurphy
6
Jader Dias

Почему все ожидают, что вы знаете PID? Вот удобный для человека способ:

pwdx `pgrep ###process_name###`
2
moodboom

Быстрый ответ - использовать ps с параметрами или информацию о файловой системе /proc. Это будет обычно работать, но не гарантируется. В общем, нет определенного, гарантированного ответа. Например, что если исполняемый файл будет удален во время выполнения, чтобы не было пути к файлу?

Смотрите Unix FAQ для более подробной информации, в частности, для вопросов 4.3 и 4.4.

2
mpez0

lsof это вариант. Вы можете попробовать что-то вроде ниже:

lsof -p PROCESS_ID

Это перечислит все файлы, открытые процессом, включая фактическое местоположение исполняемого файла. Затем можно добавить еще несколько awk, cut, grep и т.д., Чтобы найти информацию, которую вы ищете.

В качестве примера я выполнил следующие команды, чтобы определить, откуда появился мой процесс «Java»:

lsof -p 12345 | awk '{print $ NF}' | grep 'Java $'

0
ram

Вы могли бы использовать

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

или же

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

чтобы получить абсолютный путь. PID - это процесс.

0
jarno