2

アプリケーションが開いているときに起動されたタスクを停止し、アプリケーションが閉じられたときに再開する方法があるかどうか疑問に思っています。私のlaunchdタスクは、ファイルが変更されたときに通知され、そのファイルでUNIXコードを実行するように設定されています。ただし、私のアプリケーションはこのファイルに多くの変更を加えるため、アプリを開いているときにタスクを実行することはできません(そうでない場合、ファイルが変更されるたびにUNIXコードが実行されます。これは良くありません)。これを行うためのさまざまな方法の長所と短所はありますか(方法が見つかりませんでしたが)?

助けてくれてありがとう。

4

3 に答える 3

2

冒険心があれば、/ usr / include/launch.hにあるlaunchd独自のAPIを試してみてください。launchctl.cppのの実装を確認してlaunchd_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

Appleのドキュメントdo shell script

于 2009-06-16T18:14:06.630 に答える
0

KeepAliveおよびPathStateキーワードについては、launchd.plistのマニュアルページを参照してください。

于 2009-08-21T08:03:10.333 に答える