Почему и как создать сторожевого пса в Cocoa / Objective-C


Счастливого понедельника вам всем!

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

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

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

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

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

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


EDIT 1

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

  • - передаваемые байты
  • - активность клавиатуры -
  • - активность мыши -
  • - процент израсходованного жесткого диска
  • - процесс, имеющий фокус клавиатуры

...и т.д.

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

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


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>

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


1 2

1 ответ:

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

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

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