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

93

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

Jader Dias
fonte

Respostas:

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

por exemplo:

% ps -auxwe | grep 24466
raiz 24466 0,0 0,0 1476 280? S 2009 0:00 supervisionar sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 raiz raiz 0 1 de fevereiro 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise
akira
fonte
1
No meu sistema (ubuntu 14.04), você não precisa ser superusuário para executar o lscomando.
Jarno
3
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied- não se trata de executar o lscomando, trata-se de acessar as informações do processo de um processo que não pertence a você. Na minha caixa, cerca de 97% de todos os processos listados em / proc são processos raiz e os outros são distribuídos por 11 usuários diferentes.
Irfy
20

Usar:

pwdx $pid

Isso fornece o diretório de trabalho atual do pid, não o caminho absoluto.

Normalmente, o whichcomando informa qual está sendo invocado no shell:

#> which vlc
/usr/bin/vlc
seenu
fonte
3
esta resposta precisa mais upvote ..
Kokizzu
8
@Kokizzu Não, não responde porque não responde à pergunta. O comando what informa apenas qual binário será executado se você executar o comando agora. A pergunta era "qual binário já está sendo executado lá". Imagine, por exemplo, ter uma dúzia de jdks no seu computador. Se você deseja saber, para um processo java em execução, do qual o jdk foi retirado, isso não ajuda você. Ele apenas informará de que jdk será retirado, se você o executar agora. A resposta aceita também é a correta.
noamik
Uma maneira óbvia de responder essa pergunta: na minha máquina, eu executo processos com diferentes versões do JDK e algumas de 32 bits / 64 bits. Se eu quiser identificar a versão correta do jstack / jmap para o processo, a resposta acima não funcionará enquanto a resposta aceita.
Daniel Da Cunha
@Kokizzu Isso apenas responde à pergunta "Qual é o diretório de trabalho atual do processo $pid?" A postagem editada ainda não responde à pergunta. whichapenas diz "Se o comando está no caminho, então o que é?"
John Strood
pwdxdevolva-me o caminho absoluto do programa exectuable do processo, dependendo do pid no redhat x64 6.3.
Nick Dong
14

Uma maneira é ps -ef

fpmurphy
fonte
5
não trabalho para um serviço específico, basta fornecer o caminho relativo
Jader Dias
Ajudou-me a identificar um processo através do comando com o qual foi iniciado.
jpierson
2

A resposta rápida é usar pscom as opções ou as /procinformações do sistema de arquivos. Isso geralmente funciona, mas não é garantido. Em geral, não há resposta definitiva e garantida. Por exemplo, e se o arquivo em execução for excluído durante a execução, para que não haja caminho para o arquivo?

Veja as Perguntas frequentes do Unix para um pouco mais de detalhes, principalmente as questões 4.3 e 4.4.

mpez0
fonte
2

Por que todo mundo espera que você conheça o PID? Aqui está a maneira humana:

pwdx `pgrep ###process_name###`
humor
fonte
A questão estados “como eu posso ver com ps”, por isso provavelmente vai mostrar o PID
SCz
Ah ok verdade. Ainda acho que esse é um liner mais rápido em muitos dos meus casos de uso.
moodboom
1

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 um pouco mais de awk, cut, grep etc. para descobrir as informações que você está procurando.

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

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

RAM
fonte
Como isso é diferente das respostas já postadas exatamente?
Pimp Juice IT
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.

jarno
fonte