Linux – Das aktuelle Arbeitsverzeichnis eines Prozesses herausfinden?

Linux – Das aktuelle Arbeitsverzeichnis eines Prozesses herausfinden?

Wenn ich einen Prozess mit der PID X habe, wie kann ich herausfinden, in welchem ​​Verzeichnis er ausgeführt wurde? Ich kann dies anhand ps aux | grep Xder vollständigen Befehlszeile sehen, mit der er aufgerufen wurde. In diesem Fall ist es jedoch ./script.sh, und ich möchte sehen, in welchem script.sh​​Verzeichnis er ausgeführt wird.

Antwort1

Das Problem dabei /proc/PID/exeist, dass bei Shell-Skripten der Standort der Shell angezeigt wird. Das Problem dabei /proc/PID/cwdist, dass dieaktuellArbeitsverzeichnis des Prozesses. Wenn der Prozess das Verzeichnis wechselt, wird dies im Ziel dieses Symlinks widergespiegelt.

Dies zeigt den $PWD-Wert beim Starten des Skripts (ersetzen Sie „PID“ durch die gewünschte Prozess-ID):

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

oder einfach:

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

Dadurch wird der Befehl angezeigt, der es gestartet hat, sodass 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. Um mit zu starten, ./benötigen Sie lediglich procdir.

Antwort2

Es gibt eine einfachere Antwort, und zwar die Verwendung von pwdx, wie ausführlich beschriebenHier

verwandte Informationen