Если у меня есть несколько копий одного и того же приложения на диске, и запущена только одна, как я могу видеть с помощью ps
, как я могу узнать абсолютный путь, чтобы отличить его от других?
8 ответов
% 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
Использование:
pwdx $pid
Это дает вам текущий рабочий каталог pid, а не его абсолютный путь.
Обычно команда which
скажет вам, что вызывается из оболочки:
#> which vlc
/usr/bin/vlc
Одним из способов является ps -ef
Почему все ожидают, что вы знаете PID? Вот человеческий подход:
pwdx `pgrep ###process_name###`
Быстрый ответ - использовать ps
с параметрами или информацией о файловой системе /proc
. Это обычно работает, но не гарантируется. В общем, нет определенного, гарантированного ответа. Например, что, если исполняемый файл будет удален во время выполнения, чтобы не было пути к файлу?
Смотрите Unix FAQ для более подробной информации, особенно вопросы 4.3 и 4.4.
lsof это вариант. Вы можете попробовать что-то вроде ниже:
lsof -p PROCESS_ID
Это перечислит все файлы, открытые процессом, включая фактическое местоположение исполняемого файла. Затем можно добавить еще несколько awk, cut, grep и т.д., Чтобы найти информацию, которую вы ищете.
В качестве примера я выполнил следующие команды, чтобы определить, откуда появился мой процесс java:
lsof -p 12345 | awk '{print $ NF}' | grep 'java $'
Вы могли бы использовать
readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe
или же
find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"
чтобы получить абсолютный путь. PID - это процесс.