É possível obter o nome do arquivo de um processo usando o PID? O ps exibe muitas informações úteis sobre um processo, mas não uma dica sobre o local do arquivo executável do processo.
13
Uma maneira de obter a localização binária do processo é usar lsof
e grep
para o primeiro txt
segmento. Por exemplo, no shell para ver o que é binário, use o PID do shell no lugar de $$
.
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
Você pode ver que o shell está usando /bin/bash
.
Essa técnica funciona se o processo foi iniciado usando um caminho absoluto ou relativo. Por exemplo, entrar em um shell e executar
$ sleep 1234567
e usar ps
em outro shell mostra apenas como foi lançado:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
usando lsof
shows que binário foi executado:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Eu tenho o MacPorts coreutils + with_default_names instalado, o que explica que eu peguei gsleep
e não /bin/sleep
.
; exit
após a declaração de impressão para que apenas a primeiratxt
entrada seja impressa, mesmo que haja várias, como no exemplo do bash.Exemplo: você está atrás do nome do comando do processo associado para
PID 45109
...fonte
tente ps aux
fonte
ps -ef com grep funciona para mim. Para um nome de arquivo específico, basta passar pelo grep assim:
(O final 'grep -v grep' simplesmente impede que você obtenha seu próprio comando grep na saída)
fonte
ps -p <pid> -Ocommand
fonte