Jeśli widzę proces działający przy użyciu ps, jak mogę znaleźć plik wykonywalny?


11

Jeśli widzę proces działający przy użyciu ps -e, jak mogę znaleźć plik, który go uruchomił?


2
Co to za system operacyjny? Linux, BSD, Solaris ...
Patrick

linux ... ale mile widziane są rozwiązania cross-unix.
interstar

Odpowiedzi:


15

W systemie Linux: jeśli znasz PID, możesz ustawić plik cmdline dla tego pliku. Na przykład:

cat /proc/PID/cmdline

Prawdopodobnie zakończy się niepowodzeniem, jeśli plik binarny został przeniesiony po uruchomieniu programu.

I oczywiście:

lsof -n | grep PID | grep ' txt '

i:

ls -la /proc/PID/exe

który jest dowiązaniem symbolicznym do pliku wykonywalnego.


1
Zauważ, że /proc/PID/cmdlinenie ma znaku nowej linii, więc prawdopodobnie będziesz chciał zrobić coś takiego cat /proc/PID/cmdline ; echo ''.
Keith Thompson,

W rzeczywistości ma znaki NUL oddzielające argumenty, więc możesz chcieć czegoś bardziej skomplikowanego, jaktr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson

2

Skopiuj identyfikator procesu z ps -epolecenia, a następnie uruchom następujące polecenie:

ps x | grep <process-id>

Czy to nie zawiedzie, jeśli aplikacja edytuje argv [0]? iirc sendmail to robi.
Folkert van Heusden

Tak, to jest prawdopodobieństwo. Niemniej jednak przydaje się to prawie za każdym razem.
Aditya Patawari

0

Żadna z metod ( ls, lsoflub cat) w innych odpowiedzi dla mnie pracować. Jeśli zrobię:

$ nano test.txt

To mój zwycięzca:

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

Lub, aby uzyskać tylko PID, aby użyć go w programowaniu:

$ pgrep -f test
3074

Testowany na Kali Linux v1.0.6 (oparty na Debianie).
W porównaniu z prostym lsmuszę przyznać, że nie jest to tak przenośne rozwiązanie, ale przynajmniej działa.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.