O porquê e o como criar um cão de guarda no cacau / Objective-C
Feliz segunda-feira a todos!
Aqui está a minha situação. Qualquer assistência muito apreciada!
Eu criei um executável que, quando instalado, é colocado na pasta Launch Agents da máquina. Em teoria, ele deve ser executado perpetuamente, coletando dados a cada segundo. Pode parar quando a máquina está em suspensão, mas reiniciar quando o computador for reativado.
Aqui está o meu problema:às vezes o programa para espontaneamente, geralmente após alguns dias de corrida. Se alguém reiniciar o computador, o programa reiniciará e novamente será executado por algum tempo antes que o mesmo problema ocorra.
Não tenho idéia do motivo desse problema, mas um amigo me disse que eu poderia criar um 'cão de guarda' que a cada minuto verificaria se meu executável está sendo executado. Caso contrário, o watchdog reiniciará o executável.
Alguma dica de como fazer isso? Meus aplicativos são escritos em Objective-C e Cocoa e executados em Macs.
Muito obrigado!
EDIT 1
Vou explicar como o aplicativo funciona da melhor maneira possível. É basicamente uma coleção de métodos escritos em C e Objetivo C que consulta informações sobre o sistema a cada segundo:
bytes transmitidosatividade de tecladoatividade do mouseporcentagem de disco rígido usadoprocesso com foco no teclado... etc
Isso é feito usando APIs de baixo nível fornecidas pelo site da Apple Developer. Ele grava as informações em um arquivo a cada segundo. A cada hora, o arquivo é compactado e um novo arquivo é criado.
Por favor, pergunte se são necessários mais esclarecimentos :)
EDIT 2
Para quem está se perguntando, aqui está o arquivo plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.Intel</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/Library/LaunchAgents/Contents/Intel</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Obrigado novamente....