如何在 OS X 上将进程 window 置于前台?

How do I bring a processes window to the foreground on OS X?

我有一个简单的 shell/python 脚本可以打开其他 windows。我想在脚本完成后将脚本所在的终端 运行 置于前台。

我知道我的 parent window 的进程 ID。 如何将给定的 window 置于前台? 我想我必须一路从 PID 中找出 window 名称。

不确定是否有合适的方法,但这对我有用:

osascript<<EOF
tell application "System Events"
    set processList to every process whose unix id is 350
    repeat with proc in processList
        set the frontmost of proc to true
    end repeat
end tell
EOF

你也可以用 osacript -e '...' 来完成。

显然将 350 更改为您想要的 pid。

感谢 Mark 的精彩回答! 稍微扩展一下:

# Look up the parent of the given PID.
# From 
function get-top-parent-pid () {
    PID=${1:-$$}
    PARENT=$(ps -p $PID -o ppid=)

    # /sbin/init always has a PID of 1, so if you reach that, the current PID is
    # the top-level parent. Otherwise, keep looking.
    if [[ ${PARENT} -eq 1 ]] ; then
        echo ${PID}
    else
        get-top-parent-pid ${PARENT}
    fi
}

function bring-window-to-top () {
    osascript<<EOF
    tell application "System Events"
        set processList to every process whose unix id is 
        repeat with proc in processList
            set the frontmost of proc to true
        end repeat
    end tell
EOF
}

然后您可以 运行:

bring-window-to-top $(get-top-parent-pid)

快速测试使用:

sleep 5; bring-window-to-top $(get-top-parent-pid)

换成别的东西。 5 秒后终端 运行ning 你的脚本将被发送到顶部。