Pourquoi et comment créer un chien de garde en cacao / Objective-C

Bon lundi à tous!

Voici ma situation. Toute aide grandement appréciée!

J’ai créé un fichier exécutable qui, une fois installé, est placé dans le dossier des agents de lancement de la machine. En théorie, il devrait fonctionner perpétuellement, collectant des données toutes les secondes. Il peut s’arrêter lorsque la machine est en veille, mais redémarrer lorsque l’ordinateur est réactivé.

Voici mon problème: parfois, le programme s’arrête spontanément , généralement après quelques jours de fonctionnement. Si l’on redémarre l’ordinateur, le programme redémarre et s’exécute à nouveau avant que le même problème ne se produise.

Je n’ai aucune idée de la raison de ce problème, mais un ami m’a dit que je pouvais créer un “chien de garde” qui vérifierait chaque minute si mon exécutable est en cours d’exécution. Si ce n’est pas le cas, le chien de garde relancera l’exécutable.

Des indications sur comment faire cela? Mes applications sont écrites en Objective-C et Cocoa et s’exécutent sur des Mac.

Merci beaucoup!


EDIT 1

Je vais vous expliquer comment l’application fonctionne au mieux de mes capacités. Il s’agit essentiellement d’un ensemble de méthodes écrites en C et en Objective C qui interrogent des informations sur le système toutes les secondes:

  • -bytes transmis
  • -activité du clavier-
  • -activité de la souris-
  • -pourcentage de disque dur épuisé
  • -processus qui a le focus du clavier

…etc.

Pour ce faire, il utilise des API de bas niveau fournies par le site Web des développeurs Apple. Il écrit les informations dans un fichier toutes les secondes. Toutes les heures, le fichier est compressé et un nouveau fichier est créé.

S’il vous plaît demander si plus de clarification est nécessaire 🙂


EDIT 2

Pour ceux qui se demandent, voici le fichier plist

    Label com.Intel OnDemand  ProgramArguments  /Library/LaunchAgents/Contents/Intel  RunAtLoad    

Merci encore….


Vous pouvez utiliser launchd comme chien de garde. Ajoutez simplement la paire clé-valeur suivante à votre fichier plist launchd:

  KeepAlive  

Cela garantira que votre processus sera relancé s’il se bloque ou se termine autrement. (Cela ne vous aidera pas si votre processus se bloque, cependant.) Pour une documentation complète sur KeepAlive et d’autres clés launchd, exécutez “man launchd.plist” dans Terminal.