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.

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.


pwdx ist besser als das.
Björn

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.