应用程序打开时停止启动任务

时间:2009-06-16 18:03:10

标签: cocoa launchd

我想知道在应用程序打开时是否有某种方法可以停止启动任务,然后在关闭应用程序时再次启动它。我的launchd任务设置为在更改文件时通知,然后使用该文件执行一些UNIX代码。但是,我的应用程序对此文件进行了大量更改,因此当我的应用程序打开时,我无法运行任务(否则每次更改文件时都会运行UNIX代码,这样做并不好)。不同的方法有没有利弊(即使我没有找到任何方法)?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果您有冒险精神,可以尝试使用launchd自己的API,该API位于/usr/include/launch.h中。查看launchctl.cpplaunchd_stop_job的实施情况。

答案 1 :(得分:1)

您可以使用AppleScript检查应用程序是否正在运行。

我发现这篇文章描述了一个可以监控应用程序启动和关闭的AppleScript:http://macosx.com/forums/1199085-post2.html

global wasLoaded

on run
    set wasLoaded to isAppLoaded("Safari")

    idle
end run

on idle
    set x to isAppLoaded("Safari")
    if x and not wasLoaded then
        do shell script "SOME BASH COMMAND" -- stop your launchd task
        set wasLoaded to true
    else if wasLoaded and not x then
        do shell script "SOME BASH COMMAND" -- start your launchd task
        set wasLoaded to false
    end if
    return 1 --will wait 1 second before checking again
end idle

on isAppLoaded(app_name)
    tell application "System Events"
        set app_list to every application process whose name contains app_name
        if the (count of app_list) > 0 then
            return true
        else
            return false
        end if
    end tell
end isAppLoaded

我确信一个有成就的bash脚本编写者可以通过解析top的输出来告诉你一种方法来做同样的事情。

Apple documentation for do shell script

答案 2 :(得分:0)

请参阅launchd.plist手册页以获取KeepAlive和PathState关键字。