2009-10-05 6 views
5

Gibt es eine Möglichkeit, das aktuelle Arbeitsverzeichnis eines Prozesses mit seiner PID programmgesteuert unter OS X zu erhalten?Holen Sie das aktuelle Arbeitsverzeichnis des Prozesses mit einer PID programmgesteuert auf OS X

Kakao, Kohlenstoff oder AppleScript sind alle akzeptabel.

Es ist nicht akzeptabel, "pwd" an das aktuelle Terminalfenster/-register zu senden (möchte den Arbeitsbereich nicht beeinflussen).

Die Linux-Befehl „pwdx“ ist auch auch nicht akzeptabel (nur, wenn Sie den „Cocoa“ Teil lesen über)

Antwort

1

Das folgende Applescript ist eine Teillösung für Ihr Problem. Angesichts der UNIX-PID in der Variablen thePID erhält es zuerst den Namen des Prozesses. Es sendet dann den Befehl do shell script an den Anwendungsprozess, was dazu führt, dass ein Child-Shell-Prozess erzeugt wird. Der untergeordnete Prozess erbt das aktuelle Verzeichnis, das dann durch Ausführen des Befehls pwd ermittelt werden kann.

tell application "System Events" 
    set theName to name of first process whose unix id is thePID 
end tell 

tell application theName 
    do shell script "/bin/pwd" 
end tell 

Das Skript funktioniert nicht für Prozesse, die nicht mit dem AppleEvent-Framework verknüpft sind (z. B. reine POSIX-Prozesse).

8

Auf 10.5 und später:

lsof -a -p $PID -d cwd -Fn

(Präfix mit sudo, wenn der Prozess durch root gehört.)