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

Como posso conhecer o caminho absoluto de um processo em curso?

Se tenho múltiplas cópias da mesma aplicação no disco, e apenas uma está a correr, como posso ver com ps, como posso conhecer o caminho absoluto para o distinguir das outras?

Respostas (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

eg:

% 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

Utilização:

pwdx $pid

Isto dá-lhe o directório de trabalho actual do pid, não o seu caminho absoluto.

Normalmente o comando which dir-lhe-á o que está a ser invocado da concha:

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

Uma maneira é ps -ef

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

lsof é uma opção. Pode tentar algo como abaixo:

lsof -p PROCESS_ID

Isto irá listar todos os ficheiros abertos pelo processo, incluindo a localização real do executável. É então possível adicionar mais alguns awk, cut, grep, etc. para descobrir a informação que se procura.

Como exemplo, executei os seguintes comandos para identificar de onde veio o meu processo ‘java’:

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

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

A resposta rápida é usar ps com opções ou a informação do sistema de ficheiros /proc. Isso usualmente funcionará, mas não é garantido. Em geral, não há uma resposta definitiva e garantida. Por exemplo, e se o ficheiro de execução for eliminado durante a execução, para que não haja caminho para o ficheiro?

Ver a FAQ Unix para um pouco mais de detalhe, particularmente as perguntas 4.3 e 4.4.

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

Porque é que todos esperam que conheça o PID? Aqui está a forma amiga do homem:

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

Poderia usar

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

ou

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

para obter o caminho absoluto. O PID é o processo.