等待PID使用AppleScript退出

时间:2013-10-20 15:54:02

标签: macos process applescript

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

这是可能的,如果是的话,怎么样?

提前致谢

2 个答案:

答案 0 :(得分:1)

以下是(希望)让你走上正轨的一些事情:

    终端中的
  • shell脚本和'do shell script'命令:不知道你对Unix有多了解,但你肯定想去那里, 学习bash的基础知识。有一些限制,你可以运行shell 脚本通过AS通过'do shell script'命令。
  • 动态编写脚本: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}'”(取自 stackoverflow帖子。我喜欢它,因为它返回空字符串,如果没有 比赛)。根据主脚本的运行方式,了解如何运行 idle handler在脚本应用程序中工作,以及它与不同之处 使用xcode构建的应用程序(如果这是你去的路线),或只是一个 脚本。
  • 显示消息:'显示对话框'是超级简单的方法,完成超时(n秒后“放弃”)。 (对不起,如果这样的话 这么基本我只是侮辱你的情报:-))
  • 其他:退房(除非您已经结合脚本编辑环境)微笑。这是我的主要脚本编辑器。

答案 1 :(得分:1)

我最终在网上搜索后找到了解决我问题的方法。以下是我用来检查具有给定标识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

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

希望这有助于其他人