2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

Jak mogę poznać bezwzględną ścieżkę uruchomionego procesu?

Jeśli mam wiele kopii tej samej aplikacji na dysku, a tylko jedna jest uruchomiona, jak widzę z ps, jak mogę znać absolutną ścieżkę, aby odróżnić ją od innych?

Odpowiedzi (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

np:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000

Użyj:

pwdx $pid

To daje ci bieżący katalog roboczy pid, a nie jego ścieżkę absolutną.

Zazwyczaj polecenie which powie ci, które jest wywoływane z powłoki:

#> which vlc
/usr/bin/vlc
```.
14
14
14
2010-02-01 13:58:59 +0000

Jednym ze sposobów jest ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof jest opcją. Możesz spróbować czegoś takiego jak poniżej:

lsof -p PROCESS_ID

Spowoduje to wylistowanie wszystkich plików otwartych przez proces, łącznie z faktyczną lokalizacją pliku wykonywalnego. Następnie możliwe jest dodanie kilku dodatkowych funkcji awk, cut, grep itp. w celu znalezienia informacji, których szukasz.

Jako przykład, wykonałem następujące polecenia, aby zidentyfikować skąd pochodzi mój proces ‘java’:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’

2
2
2
2010-02-01 14:45:10 +0000

Szybką odpowiedzią jest użycie ps z opcjami lub info o systemie plików /proc. To będzie zwykle działać, ale nie jest gwarantowane. Ogólnie rzecz biorąc, nie ma jednoznacznej, gwarantowanej odpowiedzi. Na przykład, co jeśli plik wykonawczy zostanie usunięty podczas wykonywania, tak że nie ma ścieżki do pliku?

Zobacz the Unix FAQ dla nieco więcej szczegółów, szczególnie pytania 4.3 i 4.4.

2
2
2
2016-04-27 23:28:20 +0000

Dlaczego wszyscy oczekują, że będziesz znał PID? Oto sposób przyjazny dla człowieka:

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Możesz użyć

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

lub

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

aby uzyskać absolutną ścieżkę. PID to proces.