Como posso saber o caminho absoluto de um processo em execução?

80

Se eu tiver várias cópias do mesmo aplicativo no disco e apenas uma estiver em execução, como posso ver com ps , como posso saber o caminho absoluto para diferenciá-lo do outros?

    
por Jader Dias 01.02.2010 / 14:48

8 respostas

93
% sudo ls -l /proc/PID/exe

por exemplo:

% 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
    
por 01.02.2010 / 18:04
13

Uso:

pwdx $pid

Isso lhe dá o diretório de trabalho atual do pid, não seu caminho absoluto.

Normalmente, o comando which dirá a você qual está sendo invocado a partir do shell:

#> which vlc
/usr/bin/vlc
    
por 03.05.2013 / 08:48
12

Uma maneira é ps -ef

    
por 01.02.2010 / 14:58
5
ps auxwwwe

Fonte:

link

    
por 01.02.2010 / 14:53
2

A resposta rápida é usar ps com opções ou as informações do /proc filesystem. Isso geralmente funciona, mas não é garantido. Em geral, não há resposta definida e garantida. Por exemplo, e se o arquivo em execução for excluído durante a execução, de modo que não haja caminho para o arquivo?

Veja a FAQ Unix para mais detalhes, particularmente as questões 4.3 e 4.4.

    
por 01.02.2010 / 15:45
2

Por que todos esperam que você conheça o PID? Aqui está a maneira humana:

pwdx 'pgrep ###process_name###'
    
por 28.04.2016 / 01:28
0

Você 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. PID é o processo.

    
por 05.03.2016 / 12:35
0

lsof é uma opção. Você pode tentar algo como abaixo:

lsof -p PROCESS_ID

Isso listará todos os arquivos abertos pelo processo, incluindo a localização real do executável. É então possível adicionar mais alguns awk, cut, grep etc. para descobrir as informações que você está procurando.

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

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

    
por 09.10.2017 / 17:49