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

157558
Jader Dias

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

81

8 ответов на вопрос

95
akira
% sudo ls -l /proc/PID/exe 

например:

% ps -auxwe | grep 24466 корень 24466 0,0 0,0 1476 280? S 2009 0:00 контролировать sshd % sudo ls -l / proc / 24466 / exe lrwxrwxrwx 1 root root 0 фев 1 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise 
В моей системе (Ubuntu 14.04) вам не нужно быть суперпользователем для запуска команды `ls`. jarno 8 лет назад 1
@jarno `ls: не может прочитать символическую ссылку / proc / 28783 / exe: В доступе отказано` - речь идет не о запуске команды` ls`, а о доступе к информации о процессе, не принадлежащем вам. На моем компьютере около 97% всех процессов, перечисленных в / proc, являются корневыми процессами, а остальные распределены по 11 различным пользователям. Irfy 8 лет назад 2
13
seenu

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 
этот ответ нужно больше upvote .. Kokizzu 9 лет назад 2
@ Kokizzu Нет, это не потому, что не отвечает на вопрос вообще. Команда which сообщает вам, какой двоичный файл будет запущен, если вы выполните команду сейчас. Вопрос был в том, «какой двоичный файл там уже запущен». Представьте себе, например, наличие дюжины JDK на вашем компьютере. Если вы хотите узнать для запущенного Java-процесса, из какого jdk он был взят, это вам не поможет. Он только скажет вам, из какого jdk он будет взят, если вы выполните его сейчас. Принятый ответ также является правильным. noamik 8 лет назад 7
Очевидно, что этот ответ неверен: на моей машине я запускаю процессы с разными версиями JDK и некоторыми 32-битными / 64-битными. Если я хочу определить правильную версию jstack / jmap для процесса, ответ выше не будет работать, пока принятый ответ будет. Daniel Da Cunha 7 лет назад 0
@Kokizzu Это только отвечает на вопрос "Каков текущий рабочий каталог процесса` $ pid`? " Отредактированное сообщение все еще не отвечает на вопрос. `which` просто говорит" Если команда находится на пути, тогда что это? " John Strood 6 лет назад 0
12
fpmurphy1

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

не работает для конкретной службы, он просто предоставляет относительный путь Jader Dias 14 лет назад 4
Помог мне определить процесс с помощью команды, с которой он был запущен. jpierson 8 лет назад 0
5
Jader Dias
не показывает ВСЕ полные пути в моем linux: "root 24466 0.0 0.0 1476 280? S 2009 0:00 supervise sshd", например akira 14 лет назад 1
Это более точно, чем другие ответы ... может быть, не так полезно, но более правильный ответ. Upvoted. John Hunt 7 лет назад 0
2
mpez0

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

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

2
moodboom

Why does everyone expect you to know the PID? Here's the human-friendly way:

pwdx `pgrep ###process_name###` 
Вопрос гласит «как я вижу с помощью« ps »», поэтому он, вероятно, будет отображать PID Scz 7 лет назад 0
Ах, хорошо, правда. Я все еще нахожу, что это будет быстрее во многих моих случаях использования. moodboom 7 лет назад 0
0
jarno

You 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. PID is the process.

0
ram

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

lsof -p PROCESS_ID

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

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

lsof -p 12345 | awk '' | grep 'java $'

Чем это точно отличается от уже опубликованных ответов? Pimp Juice IT 7 лет назад 0

Похожие вопросы