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?

interstar
fonte
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.

Folkert van Heusden
fonte
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>
Aditya Patawari
fonte
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.

Sopalajo de Arrierez
fonte