Se eu vir um processo em execução usando ps, como posso encontrar o executável?


11

Se eu puder ver um processo em execução usando ps -e, como posso encontrar o arquivo que o iniciou?


2
Que SO é esse? Linux, BSD, Solaris ...
Patrick

linux ... mas soluções cross-unix são bem-vindas.
interstar

Respostas:


15

No Linux: se você conhece o PID, pode criar o arquivo cmdline para esse arquivo. Por exemplo:

cat /proc/PID/cmdline

Isso provavelmente falhará se o binário foi movido após o início do programa.

E claro:

lsof -n | grep PID | grep ' txt '

e:

ls -la /proc/PID/exe

que é um link simbólico para o executável.


1
Observe que /proc/PID/cmdlinenão possui um caractere de nova linha; portanto, você provavelmente desejará fazer algo parecido cat /proc/PID/cmdline ; echo ''.
Keith Thompson

Na verdade, ele possui NUL caracteres que separam os argumentos, então você pode querer algo ainda mais elaborado, comotr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson

2

Copie a identificação do processo do ps -ecomando e execute o seguinte:

ps x | grep <process-id>

Isso não irá falhar se um aplicativo editar o argv [0]? O iirc sendmail faz isso.
Folkert van Heusden

Sim, é uma probabilidade. No entanto, isso é útil quase sempre.
Aditya Patawari

0

Nenhum dos métodos ( ls, lsofou cat) nas outras respostas funciona para mim. Se eu fizer:

$ nano test.txt

Este é o meu vencedor:

$ pgrep -f -l test
3074 nano test.txt

Ou, para obter apenas o PID para usá-lo na programação:

$ pgrep -f test
3074

Testado no Kali Linux v1.0.6 (baseado no Debian).
Comparado a um simples ls, devo admitir que não é uma solução tão portátil, mas pelo menos funciona.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.