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?
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?
Respostas:
% 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
ls: cannot read symbolic link /proc/28783/exe: Permission denied
- não se trata de executar o ls
comando, 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.
Usar:
pwdx $pid
Isso fornece o diretório de trabalho atual do pid, não o caminho absoluto.
Normalmente, o which
comando informa qual está sendo invocado no shell:
#> which vlc
/usr/bin/vlc
$pid
?" A postagem editada ainda não responde à pergunta. which
apenas diz "Se o comando está no caminho, então o que é?"
pwdx
devolva-me o caminho absoluto do programa exectuable do processo, dependendo do pid no redhat x64 6.3.
Uma maneira é ps -ef
ps auxwwwe
Fonte:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
A resposta rápida é usar ps
com as opções ou as /proc
informaçõ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.
Por que todo mundo espera que você conheça o PID? Aqui está a maneira humana:
pwdx `pgrep ###process_name###`
ps
”, por isso provavelmente vai mostrar o PID
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 $'
ls
comando.