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

Wie kann ich den absoluten Pfad eines laufenden Prozesses erfahren?

Wenn ich mehrere Kopien der gleichen Anwendung auf der Festplatte habe und nur eine läuft, wie ich mit ps sehen kann, wie kann ich den absoluten Pfad wissen, um sie von den anderen zu unterscheiden?

Antworten (8)

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

z.B.:

% 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

Verwenden Sie:

pwdx $pid

Dies gibt Ihnen das aktuelle Arbeitsverzeichnis der pid an, nicht ihren absoluten Pfad.

Normalerweise sagt Ihnen der Befehl which, welcher von der Shell aufgerufen wird:

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

Eine Möglichkeit ist ps -ef

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

lsof ist eine Option. Sie können etwas wie unten versuchen:

lsof -p PROCESS_ID

Dies listet alle vom Prozess geöffneten Dateien auf, einschließlich des tatsächlichen Speicherorts der ausführbaren Datei. Es ist dann möglich, ein paar weitere awk, cut, grep usw. hinzuzufügen, um die gesuchten Informationen herauszufinden.

Als Beispiel habe ich die folgenden Befehle ausgeführt, um herauszufinden, woher mein “java”-Prozess stammt:

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

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

Die schnelle Antwort ist, ps mit Optionen oder die Dateisysteminfo /proc zu verwenden. Das wird normalerweise funktionieren, ist aber nicht garantiert. Im Allgemeinen gibt es keine eindeutige, garantierte Antwort. Was ist zum Beispiel, wenn die ausführende Datei während der Ausführung gelöscht wird, so dass es keinen Pfad zu der Datei gibt?

Siehe die Unix-FAQ für ein wenig mehr Details, insbesondere die Fragen 4.3 und 4.4.

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

Warum erwartet jeder, dass Sie die PID kennen? Hier ist der menschenfreundliche Weg:

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

Sie könnten

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

oder

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

verwenden, um den absoluten Pfad zu erhalten. PID ist der Prozess.