2009-10-05 11 views
5

Czy istnieje sposób, aby uzyskać bieżący katalog roboczy procesu, używając programowo PID w systemie OS X?Pobranie bieżącego katalogu roboczego procesu z pidem programowo na OS X

Kakao, węgiel lub AppleScript są dopuszczalne.

Niedopuszczalne jest wysyłanie "pwd" do bieżącego okna/karty terminala (Nie chcę wpływać na obszar roboczy).

Komenda Linux „pwdx” jest również nie do przyjęcia (tylko w przypadku odczytu nad „kakao” część)

Odpowiedz

1

Poniższy AppleScript jest częściowym rozwiązaniem problemu. Biorąc pod uwagę system UNIX pid w zmiennej thePID, najpierw otrzymuje nazwę procesu. Następnie wysyła polecenie do shell script do procesu aplikacji, co spowoduje utworzenie procesu powłoki potomnej. Proces potomny dziedziczy bieżący katalog, który można następnie określić, wykonując komendę pwd.

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 

Ten skrypt nie działa w przypadku procesów, które nie są połączone ze środowiskiem AppleEvent (np. Czystymi procesami POSIX).

8

W 10,5 W kolejnych:

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

(oznaczenie z sudo jeśli proces jest root).