2010-09-06 6 views
2

Счастливый понедельник всем вам!Почему и как создать сторожевого пса в какао/цель-C

Вот моя ситуация. Любая помощь очень ценится!

Я создал исполняемый файл, который, когда он установлен, помещается в папку запуска агентов на компьютере. Теоретически он должен работать постоянно, собирая данные каждую секунду. Он может остановиться, когда машина спит, но перезагрузитесь, когда компьютер снова активирован.

Вот моя проблема: иногда программа просто спонтанно останавливается, обычно после нескольких дней бега. Если перезапустить компьютер, программа перезагружается и снова запускается некоторое время до того, как возникнет такая же проблема.

Я не знаю причины этой проблемы, но мне сказал друг, что я могу создать «сторожевой таймер», который каждую минуту проверяет, работает ли мой исполняемый файл. Если это не так, тогда сторожевой таймер перезапустит исполняемый файл.

Любые указания относительно того, как это сделать? Мои приложения написаны в Objective-C и Cocoa и запускаются на компьютерах Mac.

Большое спасибо!


EDIT 1

Я объясню, как приложение работает в меру своих способностей. Это в основном набор методов, написанных на C и Objective C, который запрашивает информацию о системе каждую секунду:

  • -bytes переданного
  • -keyboard деятельность-
  • -mouse деятельности-
  • -percentage из жесткого диска израсходованы
  • -процесс, который имеет фокус клавиатуры

... и т.д..

Он делает это с использованием API низкого уровня, предоставляемого веб-сайтом Apple Developer. Он записывает информацию в файл каждую секунду. Каждый час файл зашифровывается и создается новый файл.

Пожалуйста, спросите, если больше требуется разъяснение :)


EDIT 2

Для тех, кто интересно, вот файл 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> 

Еще раз спасибо .. ..


+0

Возможно, вам повезет больше, если вы скажете нам, как вы сейчас это делаете. – jer

+0

@jer, Спасибо за ваш интерес. Не совсем уверен, что вы хотите прояснить. Мой исполняемый файл - это программа, которая собирает данные, такие как количество переданных байтов, каждую секунду. Это демон, который запускается при запуске, поскольку он помещается в папку Launch Agents в комплекте с файлом plist. Любые советы приветствуются. –

+0

То, о чем я прошу, - это описать свою программу, а не то, что она существует, но как она действует в настоящее время, так как вы просите альтернативы, лучше всего мы знаем, как это делается сейчас. – jer

ответ

4

Вы можете использовать launchd в качестве своего сторожевого пса.Просто добавьте пару следующий ключ-значение для вашего файла Plist запуск программ:

<key>KeepAlive</key> 
<true/> 

Это будет гарантировать, что ваш процесс будет возобновлен, если он выходит из строя или иначе заканчивается. (Однако это не поможет, если ваш процесс зависает.) Для полной документации по KeepAlive и другим стартовым ключам запустите «man launchd.plist» в Terminal.

 Смежные вопросы

  • Нет связанных вопросов^_^