Linux - Finden Sie das aktuelle Arbeitsverzeichnis eines Prozesses heraus?

11

Wenn ich eine Prozess-PID X habe, wie kann ich herausfinden, in welchem ​​Verzeichnis sie ausgeführt wurde? Ich kann mit ps aux | grep Xder vollständigen Befehlszeile sehen, mit der es aufgerufen wurde. In diesem Fall ist es jedoch so ./script.sh, und ich möchte sehen, welches script.shläuft.

Rory
quelle

Antworten:

11

Das Problem dabei /proc/PID/exeist, dass bei Shell-Skripten die Position der Shell angezeigt wird. Das Problem dabei /proc/PID/cwdist, dass das aktuelle Arbeitsverzeichnis des Prozesses angezeigt wird. Wenn der Prozess Verzeichnisse ändert, spiegelt sich dies im Ziel dieses Symlinks wider.

Dies zeigt, was der $ PWD zum Zeitpunkt des Starts des Skripts war (ersetzen Sie die Prozess-ID, an der Sie interessiert sind, wo "PID" angezeigt wird):

procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir

oder einfach:

grep -az "\bPWD" /proc/PID/environ

Dies zeigt den Befehl an, mit dem es gestartet wurde, damit Sie sehen können, ob ein relatives oder absolutes Verzeichnis verwendet wurde:

proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd

oder einfach:

grep -az PROC_NAME /proc/PID/cmdline

Zusammen sollten diese Ihnen zeigen, welches Skript ausgeführt wird. Zum einen begann mit ./allem, was Sie brauchen, ist procdir.

Bis auf weiteres angehalten.
quelle
pwdx ist besser als das.
Björn
8

Es gibt eine einfachere Antwort, und diese ist zu verwenden pwdx, wie hier beschrieben

Markus Jevring
quelle
Dies ist die bessere Antwort.
Björn