Моему приложению необходимо записывать файлы в ограниченные места в файловой системе.
Для этого я использую вспомогательный инструмент, который запускается от имени пользователя root.
Все работает правильно, следуя этому пример, мой вспомогательный инструмент правильно установлен и запущен. Я использую это решение, чтобы иметь возможность «разбудить» вспомогательный инструмент, иначе он не запускается более одного раза после начальной загрузки.
Вспомогательный инструмент ожидает сообщений от основного приложения и правильно их выполняет. У меня также есть своего рода сообщение, которое просит инструмент выключить, который также работает правильно.
Проблема в том, что launchd
перезапускаю инструмент каждый раз, когда он завершает работу, независимо от того, какие ключи я указываю в launchd.plist
файле.
Я не хочу, чтобы вспомогательный инструмент работал вечно, ожидая сообщений, а запускался только по запросу.
Вопрос: нормально ли, что вспомогательный инструмент перезапускается каждый раз после его завершения? Если нет, то как дать ему умереть и перезапустить по требованию?
Вот содержание launchd.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>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>RunAtLoad</key>
<true/>
<key>Label</key>
<string>com.mycompany.Helper</string>
<key>MachServices</key>
<dict>
<key>com.mycompany.Helper</key>
<true/>
</dict>
</dict>
</plist>
Конечно, я пробовал различные комбинации ключей и значений, а также различные коды состояния выхода для вспомогательного инструмента. Это никак не изменилось. launchd
управляет процессом.
KeepAlive
в plist, его не следует перезапускать. Независимо от того, какое значение я указал для ключа в plist,launchd
продолжает перезапускать процесс. - person Vince   schedule 15.10.2015