2009-06-16 4 views
2

Je me demande s'il est possible d'arrêter une tâche launchd quand une application est ouverte, puis de la redémarrer lorsque l'application est fermée. Ma tâche launchd est définie pour être notifiée lorsqu'un fichier est modifié et ensuite faire du code UNIX avec le fichier. Cependant, mon application apporte beaucoup de modifications à ce fichier, donc je ne peux pas avoir la tâche en cours lorsque mon application est ouverte (ou bien elle exécutera le code UNIX chaque fois que le fichier est changé, ce qui n'est pas bon). Y at-il des avantages et des inconvénients pour les différentes méthodes pour le faire (même si je n'ai trouvé aucune méthode)?Arrêter la tâche launchd lorsque l'application est ouverte

Merci pour toute aide.

Répondre

1

Vous pouvez utiliser applescript pour vérifier et voir si une application est en cours d'exécution.

Je trouve ce poste qui décrit un AppleScript qui surveillera une startup de l'application et l'arrêt: 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 

Je suis sûr une accompli bash scripteur pourrait vous dire une façon de faire la même chose en analysant la sortie à partir de top.

Apple documentation for do shell script

+0

Bonjour Brian: Merci pour ce code. :) J'apprécie vraiment cela. Quelques questions, car je ne suis pas très bon dans AppleScript ... Tout d'abord, est-ce que ça quitte mon processus launchd ou simplement regarder si mon application fonctionne? Aussi, comment est-ce que j'intégrerais ceci dans mon fichier launchd afin qu'il n'exécute pas mon code UNIX en premier? Merci l'aide! – PF1

+0

Vous devez remplir les lignes pour démarrer et arrêter votre processus launchd - je ne connais pas vraiment launchd donc je ne suis pas sûr de ce que serait la commande exacte. J'ai mis à jour le code pour en remplir un peu plus. –

+0

Hey Brian: Merci pour votre aide. J'ai finalement trouvé un moyen pour qu'il puisse fonctionner sans avoir à transformer les résultats en UNIX, etc ... Parse l'UNIX dans l'Applescript. :) Je dois vous remercier pour cette idée. – PF1

2

Si vous vous sentez aventureux, vous pouvez essayer propre API de launchd, qui est en /usr/include/launch.h. Découvrez la mise en œuvre de launchd_stop_job en launchctl.cpp.

0

Veuillez consulter la page de manuel launchd.plist pour les mots clés KeepAlive et PathState.

Questions connexes