Frage

Ich frage mich, ob es irgendeine Art, wie ich eine launchd Aufgabe stoppen kann, wenn eine Anwendung geöffnet ist, und es dann wieder gestartet werden, wenn die Anwendung geschlossen wird. Meine launchd Aufgabe wird benachrichtigt werden, wenn eine Datei geändert wird, und dann tut einig UNIX-Code mit der Datei. Allerdings macht meine Anwendung viele Änderungen an diese Datei, damit ich nicht die Aufgabe ausgeführt haben kann, wenn mein app geöffnet ist (sonst wird es den UNIX-Code jedes Mal ausgeführt, dass die Datei geändert wird, was nicht gut ist). Gibt es Vor-und Nachteile der verschiedenen Methoden, dies zu tun (obwohl ich habe keine Methoden gefunden)?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Sie könnten Applescript verwenden, um zu überprüfen und festzustellen, ob eine App ausgeführt wird.

ich diesen Beitrag gefunden, dass ein Apple beschreibt, die eine Anwendung der An- und Abfahren überwacht: 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

Ich bin sicher, dass ein versierter bash scripter Sie einen Weg erkennen konnte durch Parsen der Ausgabe von top das Gleiche zu tun.

Apple-Dokumentation für do shell script

Andere Tipps

Wenn Sie etwas Zeit mitbringen, können Sie launchd eigene API versuchen, die in /usr/include/launch.h ist. Schauen Sie sich die Implementierung von launchd_stop_job in launchctl CPP .

Bitte beachten Sie die launchd.plist Manpage für die Keep-Alive und PathState Keywords.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top