Czy można uzyskać nazwę pliku procesu za pomocą PID? ps wyświetla wiele przydatnych informacji o procesie, ale nie podpowiedź na temat lokalizacji pliku wykonywalnego procesu.
13
Jednym ze sposobów uzyskania binarnej lokalizacji procesu jest użycie lsof
i grep
dla pierwszego txt
segmentu. Na przykład w powłoce, aby zobaczyć, co to jest plik binarny, użyj zamiast identyfikatora PID powłoki $$
.
$ 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
Widać, że używa powłoki /bin/bash
.
Ta technika działa, jeśli proces został uruchomiony przy użyciu ścieżki bezwzględnej lub względnej. Na przykład przejście do jednej powłoki i uruchomienie
$ sleep 1234567
a użycie ps
w innej powłoce pokazuje tylko, jak zostało uruchomione:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
za pomocą lsof
programów, które uruchomił binarny:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Mam zainstalowane MacPorts coreutils + with_default_names, co wyjaśnia, że wziąłem gsleep
i nie /bin/sleep
.
; exit
po instrukcji print, aby wydrukować tylko pierwszytxt
wpis, nawet jeśli jest ich kilka, jak w przykładzie bash.Przykład: szukasz nazwy polecenia procesu skojarzenia dla
PID 45109
...źródło
spróbuj ps aux
źródło
ps -ef with grep działa dla mnie. Aby uzyskać konkretną nazwę pliku, po prostu przeprowadź grep w ten sposób:
(Ten końcowy 'grep -v grep' po prostu zatrzymuje otrzymywanie własnego polecenia grep w danych wyjściowych)
źródło
ps -p <pid> -Opolecenie
źródło