1

Я пишу приложение, которое использует библиотеку, которая не будет работать, когда приложение запускается как демон launchd. В библиотеке есть ошибка, из-за которой при использовании демона выдается ошибка шины. (См. Мой пост переполнения стека: https://stackoverflow.com/questions/20599283/signal-10-sigbus-in-c-library-when-running-application-as-launchd-daemon)

Однако все работает нормально, когда я запускаю приложение нормально. Мне интересно, есть ли какие-либо альтернативы launchd, которые я должен рассмотреть. Приложение должно запускаться при загрузке и запускаться, даже если ни один пользователь не вошел в систему. Также было бы желательно, чтобы приложение перезапускалось, если оно зависало, но я могу жить без этого, если придется.

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

1 ответ1

2

Нет. Скорее всего, вы столкнетесь с той же проблемой, что и любая другая альтернатива.

Не вдаваясь в подробности того, что очевидно из трассировки стека, которая является территорией StackOverflow:

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

Ваша проблема может быть в любой разнице между двумя. (Мое обоснованное предположение - переменные среды, из-за того, что находится в трассировке стека.) Но эти различия присущи демоническим руководителям. Выполнение демонов с фиксированными, определяемыми состояниями процесса является частью их дизайна. Если вы замените другого демона-супервизора, вы все равно получите контролируемое состояние процесса, которое не соответствует состоянию процессов, запущенных в сеансе входа в систему.

Вы не должны рассматривать альтернативы launchd . Вы должны посмотреть на свой список параметров и настроить его так, чтобы настроить нужные вещи (возможно, переменные среды, как я уже говорил), которые ваш ODBC-драйвер ожидает сделать доступными для него. И вы должны читать любой 4D документ, который есть. ☺

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .