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ł?

interstar
źródło
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.

Folkert van Heusden
źródło
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>
Aditya Patawari
źródło
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.

Sopalajo de Arrierez
źródło