Получить текущий рабочий каталог процесса с pid программно на OS X - PullRequest
5 голосов
/ 05 октября 2009

Есть ли способ получить текущий рабочий каталог процесса, используя его PID программно в OS X?

Допускается использование какао, углерода или AppleScript.

Недопустимо отправлять «pwd» в текущее окно / вкладку терминала (не хотите влиять на рабочую область).

Команда linux "pwdx" также недопустима (на случай, если вы прочитаете часть "Какао")

Ответы [ 2 ]

8 голосов
/ 13 ноября 2009

10,5 и позже:

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

(Префикс sudo, если процесс принадлежит пользователю root).

1 голос
/ 07 октября 2009

Следующий AppleScript является частичным решением вашей проблемы. Учитывая pid UNIX в переменной thePID, он сначала получает имя процесса. Затем он отправляет команду do shell script процессу приложения, в результате чего создается дочерний процесс оболочки. Дочерний процесс наследует текущий каталог, который затем можно определить, выполнив команду 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

Скрипт не работает для процессов, которые не связаны с платформой AppleEvent (например, для процессов с чисто POSIX).

...