在OS X上以编程方式获取进程的当前工作目录

Cor*_*oyd 5 cocoa applescript macos-carbon process objective-c

有没有办法在OS X上以编程方式使用它的PID来获取进程的当前工作目录?

Cocoa,Carbon或AppleScript都可以接受.

将"pwd"发送到当前终端窗口/选项卡(不想影响工作区)是不可接受的.

linux命令"pwdx"也是不可接受的(以防你阅读"Cocoa"部分)

yak*_*lev 8

在10.5及更高版本:

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

(sudo如果进程由root拥有,则为前缀.)


sak*_*kra 1

以下 AppleScript 是您问题的部分解决方案。给定变量中的 UNIX pid,thePID它首先获取进程的名称。然后,它将do shell script命令发送到应用程序进程,这将导致生成子 shell 进程。子进程继承当前目录,然后可以通过运行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
Run Code Online (Sandbox Code Playgroud)

该脚本不适用于未链接到 AppleEvent 框架的进程(例如,纯 POSIX 进程)。