2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99
Advertisement

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

Advertisement

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

Advertisement
Advertisement

Ответы (8)

117
117
117
2010-02-01 17:04:22 +0000
% 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
21
21
21
2013-05-03 06:48:17 +0000

Использовать:

pwdx $pid

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

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

#> which vlc
/usr/bin/vlc
14
Advertisement
14
14
2010-02-01 13:58:59 +0000
Advertisement

Один из способов - ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
Advertisement
3
3
2017-10-09 15:49:14 +0000
Advertisement

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

lsof -p PROCESS_ID

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

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

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’.

2
2
2
2010-02-01 14:45:10 +0000

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

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

2
Advertisement
2
2
2016-04-27 23:28:20 +0000
Advertisement

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

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Вы можете использовать

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

или

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

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

Advertisement

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

6
10
10
5
2
Advertisement
Advertisement