
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 X
der 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/exe
ist, dass bei Shell-Skripten der Standort der Shell angezeigt wird. Das Problem dabei /proc/PID/cwd
ist, 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