Como determino o caminho para um binário de um processo?

30

Existe uma maneira de descobrir o local do diretório / disco em que um processo foi iniciado? Estou ciente da montagem / proc, mas não sou realmente onde procurar dentro dela.

SuperJumbo
fonte
1
Você quer dizer a localização do binário ou o diretório a partir do qual um processo foi iniciado?
Lekensteyn
Desculpe pela ambigüidade, quero dizer o binário
superjumbo

Respostas:

37

A /procmaneira seria inspecionar o exelink no diretório correspondente ao pid.

Vamos dar um exemplo com update-notifier:

Encontre o pid, que é 15421 neste exemplo:

egil@gud:~$ ps x | grep update-notifier
 2405 pts/4    S+     0:00 grep update-notifier
15421 ?        Sl     0:00 update-notifier

Procure o link simbólico:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Egil
fonte
Ah sim, eu estava quase lá. Lenda, obrigado.
superjumbo
6

Desde que você tenha um ID do processo disponível, você pode usar:

readlink -f /proc/$pid/exe

(substitua $pidpelo ID do processo)

Se o processo não pertencer a você, você terá que colocá-lo sudona frente dele.

Um exemplo para determinar a localização do comando firefox:

  1. A saída de ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 é o ID do processo, então você deve executar:

    readlink -f /proc/28179/exe
    

    quais saídas:

    /usr/bin/firefox
    
Lekensteyn
fonte
2
Você pode fazer coisas legais com /proc/$pid/exe, se o binário for excluído acidentalmente, você pode restaurá-lo com:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

Pressione Ctrl+ Alt+ Tpara ir para um terminal e digite:

ls -al /proc/{pid}/fd  

e depois verifique a saída

Isso listará todos os arquivos aos quais seu processo está associado ...

xiaoyifang
fonte
Poderia, por favor rever minhas edições e também rever o ajuda a edição para melhorar a legibilidade de suas respostas no futuro ... ;-)
Fabby
0

Todos os comandos nas outras respostas são bons, mas você pode fazer ainda mais - vendo como algum processo foi realmente executado antes de chegar à lista de processos.

Execute no terminal:

top

E enquanto estiver em execução, pressione o teclado Ce você obterá um comando dos processos que foram executados.

Aleks
fonte