2009-06-16 13 views
2

アプリケーションが開いているときにlaunchdタスクを停止してから、アプリケーションを終了したときに起動する方法があるのだろうかと思います。私のlaunchdタスクは、ファイルが変更されたときに通知を受け、そのファイルでUNIXコードを実行するように設定されています。しかし、私のアプリケーションはこのファイルに多くの変更を加えるので、私のアプリケーションが開いているときにタスクを実行することができません。そうしないと、ファイルが変更されるたびにUNIXコードが実行されます。これを行うためのさまざまな方法に賛否両論はありますか(私には方法が見つかりませんでしたが)。起動時のタスクを停止するアプリケーションを開くとき

ありがとうございました。

答えて

1

アプリが実行されているかどうかを確認するために、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スクリプターが同じことを行うためにあなたの道を言うことができると確信しています:

私は、アプリケーションの起動とシャットダウンを監視するAppleScriptを記述し、この記事を見つけました topから。

Apple documentation for do shell script

+0

こんにちはブライアン: ありがとうございます。 :) ほんとうにありがとう。 AppleScriptでそれほどうまくいきませんでした...まず、起動プロセスをやめたり、アプリが動いているかどうかを調べたりしますか?また、私はこれを私のlaunchdファイルにどのように統合して、私のUNIXコードを最初に実行しないでしょうか? ありがとうございました! – PF1

+0

launchdプロセスを開始して停止させるには、行を入力する必要があります。私はlaunchdを本当に知っていないので、正確なコマンドが何であるか分かりません。もう少し詳しく記入するようにコードを更新しました。 –

+0

ちょっとブライアン:助けてくれてありがとう。私は最終的に、UNIXなどに結果を変形することなく動作するように方法を考え出しました... UNIXを解析してApplescriptにします。 :)私はそのアイデアに感謝しなければならない。 – PF1

2

あなたは冒険を感じている場合は、/usr/include/launch.hであるlaunchdの独自のAPIを、試してみてください。 launchd_stop_jobの実装をlaunchctl.cppにチェックしてください。

0

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

関連する問題