Pergunta

Eu estou querendo saber se há alguma maneira eu posso parar uma tarefa launchd quando um aplicativo é aberto, e depois iniciá-lo novamente quando o aplicativo é fechado. Minha tarefa launchd está previsto para ser notificado quando um arquivo é alterado e, em seguida, fazer algum código UNIX com o arquivo. No entanto, o meu aplicativo faz uma série de mudanças para este arquivo para que eu não posso ter a tarefa em execução quando meu aplicativo está aberto (ou então ele irá executar o código UNIX cada vez que o arquivo for alterado, o que não é bom). Existem prós e contras para os diferentes métodos para fazer isso (apesar de eu não ter encontrado quaisquer métodos)?

Obrigado por qualquer ajuda.

Foi útil?

Solução

Você pode usar AppleScript para verificar e ver se um aplicativo está em execução.

Eu encontrei este post que descreve um AppleScript que irá monitorar a inicialização de um aplicativo e desligamento: 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

Estou certo de que um scripter bash realizado poderia dizer-lhe uma maneira de fazer a mesma coisa analisando a saída de top.

documentação da Apple para do shell script

Outras dicas

Se você estiver sentindo aventureiro, você pode tentar própria API do launchd, que está em /usr/include/launch.h. Confira a implementação de launchd_stop_job em launchctl .cpp .

Por favor, consulte a página man launchd.plist para o KeepAlive e PathState palavras-chave.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top