87

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

8 ответов8

102
% 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 root root 0 Feb  1 18:05 /proc/24466/exe -> /package/admin/daemontools-0.76/command/supervise
14

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

pwdx $pid

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

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

#> which vlc
/usr/bin/vlc
13

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

5
ps auxwwwe

Источник:

https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output

2

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

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

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

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

0

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

lsof -p PROCESS_ID

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

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

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

0

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

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

или же

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .