2

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

谢谢你的帮助。

4

3 回答 3

2

如果你喜欢冒险,你可以试试 launchd 自己的 API,它位于 /usr/include/launch.h。查看launchctl.cpplaunchd_stop_job中的实现。

于 2009-06-17T01:08:30.397 回答
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.

苹果文档do shell script

于 2009-06-16T18:14:06.630 回答
0

有关 KeepAlive 和 PathState 关键字,请参阅 launchd.plist 手册页。

于 2009-08-21T08:03:10.333 回答