Mit welchen Befehlen kann das aktuelle Arbeitsverzeichnis (CWD) eines laufenden Prozesses ermittelt werden? Dies wären Befehle, die Sie außerhalb des Prozesses verwenden könnten.
167
Mit welchen Befehlen kann das aktuelle Arbeitsverzeichnis (CWD) eines laufenden Prozesses ermittelt werden? Dies wären Befehle, die Sie außerhalb des Prozesses verwenden könnten.
Es gibt 3 Methoden, die mir bekannt sind:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Sagen wir, wir haben diesen Prozess.
$ pgrep nautilus
12136
Wenn wir dann verwenden pwdx
:
$ pwdx 12136
12136: /home/saml
Oder Sie können verwenden lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
Oder Sie stöbern direkt in /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.pwdx
funktioniert bei mir.pgrep <process-name>
Ich gehe davon aus, dass Sie die Prozess-ID in haben
pid
. Die meisten Methoden auf den meisten Systemen setzen voraus, dass die Shell, von der aus Sie dies tun, als derselbe Benutzer wie der Zielprozess (oder Root) ausgeführt wird.Unter Linux und Solaris und möglicherweise einigen anderen System V-Unices:
Unter Linux (mit Ausnahme von Embedded-Systemen, auf denen dies
readlink
nicht verfügbar ist), jedoch nicht unter Solaris:Auf fast jeder Unix-Variante können Sie verwenden
lsof
. Beachten Sie, dass eine neue Zeile gedruckt wird als\n
(nicht von Backslash zu unterscheiden, gefolgt vonn
). Wenn Sie sich glücklich schätzen, können Sie das zweite Formular verwenden, mit dem alle Leerzeichen im Verzeichnisnamen stillschweigend unterdrückt werden.Bonus: Wenn Sie einen Prozess veranlassen müssen, sein aktuelles Verzeichnis zu ändern, können Sie dies mit einem Debugger tun. Dies ist beispielsweise nützlich, um ein Programm mit langer Laufzeit, das sich nicht um das aktuelle Verzeichnis kümmert, aus einem Verzeichnis zu verschieben, das Sie entfernen möchten. Nicht alle Programme schätzen es, wenn ihr aktuelles Verzeichnis unter ihren Füßen geändert wird - zum Beispiel ist es wahrscheinlich, dass eine Shell abstürzt.
quelle
pwdx
anderer Unixe sagen?pwdx
ist seit dem 20. Jahrhundert auf Solaris vertreten, Linux seit Mitte der 2000er Jahre ( laut Manpage imitiert es Solaris). Auf keinem anderen Unix-AFAIK vorhanden.pwdx
es auchWenn Ihr System über Folgendes verfügt
/proc
, können Sie immer Folgendes tun:Wenn Sie die CWD aus einem anderen Prozess als dem, an dem Sie interessiert sind, ermitteln möchten, müssen Sie diese natürlich durch
$$
die PID Ihres interessierenden Prozesses ersetzen .quelle
Basierend auf @Gilles Antwort ..
Wenn Sie die PID Ihres Prozesses kennen, verwenden Sie für Mac OSX und Linux :
Arbeitsdir des Prozesses zu bekommen ..
quelle