É possível encontrar o caminho de um programa em execução?

16

Eu tenho um processo xmms2d em execução, mas dois arquivos executáveis possíveis (em diretórios diferentes, ambos no caminho do executável) que poderiam gerá-lo. Eu suspeito que um deles está corrompido, porque às vezes este programa funciona e às vezes não. O processo rodando agora funciona, então eu quero deletar (ou renomear) o outro.

ps ax|grep "xmms" retorna 8505 ? SLl 2:38 xmms2d -v sem informações de caminho. Dado o PID, posso descobrir se foi executado a partir de /usr/bin/xmms2d ou /usr/local/bin/xmms2d ?

Obrigado!

    
por Wolf 02.03.2011 / 23:56

4 respostas

22

Tente isto:

ls -l /proc/8505/exe

Ou se você não quiser analisar a saída de ls , faça:

readlink /proc/8505/exe

ou

realpath /proc/8505/exe
    
por 03.03.2011 / 00:03
6

Se você estiver executando o Solaris, o caminho é um pouco diferente do sugerido pelo Linux:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Se você quiser conhecer o diretório de trabalho atual dos processos em execução, use:

pwdx $(pgrep xmms)

por exemplo:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp
    
por 03.03.2011 / 08:23
-1

Eu inicio o mousepad a partir do shell:

mousepad & 
[1] 24289

verifique de onde vem:

which mousepad 
   /usr/bin/mousepad

inicie com o caminho:

/usr/bin/mousepad &

procure por ps:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Como vemos, o que foi invocado sem caminho é exibido sem caminho e iniciado com o PATH e, portanto, encontrado por

which mousepad

Simples assim, não é? Esperar! E se eu começar o mousepad no menu? Bem, pode ser especificado com ou sem o uso das configurações do PATH. Eu tentei. Um início normal leva a um simples 'mousepad' em ps v -C . Como ~ / bin é a primeira parte do meu PATH, eu crio um manequim lá e, voila, o manequim é iniciado a partir do menu.

Mas e se você iniciar um programa que se apaga? Que não encontrará o programa deletado e reportará um erro errado, se houver um segundo no caminho.

Então essa é uma condição de corrida. Se você sabe que seus programas não são excluídos ou não são movidos enquanto você está investigando a localização deles, ps v -C NAME e which NAME devem funcionar muito bem.

    
por 03.03.2011 / 06:31
-4

Vá em frente e exclua ambos os arquivos (sem a opção force -f). O arquivo que é deletado é o que não estava rodando !!

O bloqueio de arquivos executáveis do sistema não permitirá que você exclua nenhum arquivo que esteja atualmente em execução.

    
por 12.12.2013 / 12:15

Tags