【问题标题】:Wait for PID to exit using AppleScript使用 AppleScript 等待 PID 退出
【发布时间】:2013-10-20 15:54:01
【问题描述】:

我是 AppleScript 的新手,但我必须重新创建我在 OSX 中为 Windows 编写的批处理文件,而 AppleScript 似乎是最好的方法。基本上,脚本将由另一个程序动态创建然后执行。 AppleScript 只需要等待一个进程,我想通过它的进程 ID 来识别它,如果该进程在特定时间后仍在运行,则显示一条消息。

这可能吗?如果可以,怎么做?

提前致谢

【问题讨论】:

    标签: macos process applescript


    【解决方案1】:

    在网上搜索了更多信息后,我最终找到了解决我给定问题的方法。这是我用来检查具有给定 ID pid 的进程是否正在运行的 AppleScript 代码

    tell application "System Events"
        set runningApplications to (unix id of every process)
            if (runningApplications contains (pid as integer)) is false then
               -- process is not running
            else
               -- process still running
            end if
    end tell
    

    这显然只是一个 sn-p。我个人在repeat 循环中有上述语句,但这提供了检查进程ID(即unix id)的解决方案。

    希望这对其他人有所帮助

    【讨论】:

    • 只是一个简短的说明(感谢您的支持!):仅在必要时(出于性能原因)使用 tell 块是一种很好的做法。例如,我可能会按照您的方式进行操作:tell application "System Events" to set runningApplications to (unix id of every process)(注意“to”)-然后将其余部分自行处理(删除“end tell”)。这仅在该行中使用“告诉”。
    • 顺便说一句,很抱歉,如果我没有明确说明我最初的 msg 中的第二位代码 (ps/grep/awk) 确实获得了 pid。
    • @CRGreen 感谢您的注意。关于 PID,我只获取 所有 进程的 PID,以便确定我的应用程序的 PID(我可以获得)是否存在。这是我可以找到使用 AppleScript 轻松确定特定 PID 是否存在的唯一方法
    【解决方案2】:

    这里有一些东西可以(希望)让你上路:

    • 终端中的 shell 脚本和 'do shell script' 命令:不知道你对 Unix 了解多少,但你肯定想去那里,并且 学习 bash 的基础知识。有一些限制,你可以运行 shell 通过“do shell script”命令通过 AS 编写脚本。
    • 动态编写脚本:osascript 和 osacompile 可能会派上用场。请参阅手册页。 osascript 可以执行 脚本或脚本文本,而 osacompile 可以(!)将文本编译成 脚本形式(非文本形式)等。
    • 脚本等待/观察进程:更多的 shell 脚本内容,或者使用 Finder(以前称为 Scriptable Finder!), 也就是说,Finder 的脚本功能(字典),比如 告诉应用程序“Finder”获取进程名称。 shell 版本(可以通过 'do shell script' AS 命令调用) 可能是 "ps ax | grep Safari | grep -v grep | awk '{print $1}'"(取自 堆栈溢出帖子。我喜欢它,因为如果没有,它会返回空字符串 匹配)。根据主脚本的运行方式,了解如何 空闲处理程序在脚本应用程序中工作,以及它与 使用 xcode 构建的应用程序(如果这是您要走的路线),或者只是 脚本。
    • 显示消息:“显示对话框”是超级简单的方法,完成超时(n 秒后“放弃”)。 (对不起,如果这是 太基本了,我只是侮辱了你的智慧:-))
    • 其他:看看(除非你已经习惯了脚本编辑环境)微笑。这是我的主要脚本编辑器。

    【讨论】:

    • +1 感谢您的回答。你没有侮辱我的智力,我是 OSX 的新手,更不用说 AppleScript,所以你的回答对我非常有用。我自己确实找到了一个解决方案,我将在此处添加,但如果我可以更多地投票给你的答案,我会
    猜你喜欢
    • 2012-09-16
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多