Interrompi attività di avvio all'apertura dell'app
Domanda
Mi chiedo se esiste un modo per interrompere un'attività di avvio quando un'applicazione è aperta, quindi riavviarla quando l'applicazione viene chiusa. La mia attività di avvio è impostata per essere notificata quando un file viene modificato e quindi eseguire un codice UNIX con il file. Tuttavia, la mia applicazione apporta molte modifiche a questo file, quindi non posso avere l'attività in esecuzione quando la mia app è aperta (altrimenti eseguirà il codice UNIX ogni volta che il file viene modificato, il che non va bene). Esistono vantaggi e svantaggi dei diversi metodi per farlo (anche se non ho trovato alcun metodo)?
Grazie per l'aiuto.
Soluzione
Potresti usare applecript per verificare e vedere se un'app è in esecuzione.
Ho trovato questo post che descrive uno script di apple che monitorerà l'avvio e l'arresto di un'applicazione: 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
Sono sicuro che uno scripter bash
esperto potrebbe dirti un modo per fare la stessa cosa analizzando l'output da top
.
Altri suggerimenti
Se ti senti avventuroso, potresti provare l'API di launchd, che si trova in /usr/include/launch.h. Controlla l'implementazione di launchd_stop_job
in launchctl.cpp .
Consultare la pagina man launchd.plist per le parole chiave KeepAlive e PathState.