2013-01-23 27 views
5

Sto cercando un modo per monitorare lo stato di una delle mie applicazioni su OS X. C'è un numero di componenti che devo monitorare come lo stato di vari canali di comunicazione. Se si abbassano, il processo di monitoraggio dovrebbe essere in grado di avvisare l'utente sia sullo schermo sia tramite una notifica push.Come monitorare un processo su OS X?

I servizi XPC sembrano promettenti, ma se l'app si interrompe, presumo che questo eseguirà anche il servizio o mi sbaglio?

La mia soluzione preferita è qualcosa che controlla anche la terminazione imprevista e riavvia l'app se ciò accade.

Qual è il modo migliore per farlo?

risposta

0

Se ogni processo viene eseguito in una propria discussione, è possibile eseguire un programma di controllo che monitora se i thread sono vivi. Uno script che esegue ps in un ciclo e analizza l'output potrebbe farlo.

È possibile visualizzare le varie opzioni here. Vedere ad esempio -C per selezionare il nome del comando e -m per mostrare tutti i thread.

1

È possibile scrivere un'app che avvia l'applicazione principale come processo figlio e attende che esca. Potrebbe controllare il codice di uscita e quindi reagire in base alle proprie esigenze.

Questo approccio è spiegato qui: https://stackoverflow.com/a/78095/785411

a fork() un processo di monitoraggio per eseguire l'applicazione principale, come un processo figlio, questo è spiegato qui: https://stackoverflow.com/a/4327062/785411

1

Penso che si possa fare uso di le strutture integrate Launchd e CrashReporter per soddisfare le vostre esigenze.

Launchd è il supervisore di sistema OS X progettato per l'avvio e il monitoraggio di processi in background e viene in genere utilizzato per eseguire servizi XPC. agenti launchd possono reagire a vari eventi del sistema, e può essere configurato per riavviare processi in caso di loro danneggiamento (specificate tramite la chiave KeepAlive/SuccessfulExit nella property list)

launchd può essere impostato per rispondere ai vari eventi del sistema come evento di lancio, incluso il monitoraggio di file e directory, orari pianificati o l'ascolto di connessioni di rete.

CrashReporter è la funzione di sistema OS X che rileva e registra tutti i blocchi di processo. Registra attraverso lo AppleSystemLogger facility e si può accedere con gli strumenti syslog come documentato nella nota tecnica collegata. In Mountain Lion, i rapporti sugli arresti dei processi utente terminano con ~/Library/DiagnosticReports/, con un crashlog e una coppia di file plist creati per evento di arresto anomalo.

Penso che potresti utilizzare queste funzionalità in un paio di modi per raggiungere i tuoi requisiti, se launchd è responsabile per l'esecuzione dei servizi xpc, può assumere la responsabilità di riavviarli in caso di crash e possono essere dissociati da qualsiasi app si blocca.

si potrebbe scrivere un agente launchd che risponde a eventi di crash dal montioring directory relazione crash (ad esempio utilizzando la proprietà QueueDirectories) per i nuovi registri e rilancia la vostra applicaton, o presenta le notifiche.

2

Penso che il monitoraggio dei canali di comunicazione, ecc., Debba essere eseguito da ciascuna specifica componente (processi).E se si verifica l'errore imprevisto, il componente dovrebbe uscire immediatamente per assicurare una corretta pulizia.

Per il monitoraggio processe, sotto il pomo tecnico Q & Un documento sarà veramente utile:
Technical Note TN2050: Observing Process Lifetimes Without Polling

+0

+1 per utile riferimento ad Apple Nota tecnica! – Floris