Launchd альтернативы
Я пишу приложение, которое использует библиотеку, которая не будет работать, когда приложение запускается как демон launchd. В библиотеке есть ошибка, из-за которой при использовании демона возникает ошибка шины. (См. Мой пост переполнения стека: https://stackoverflow.com/questions/20599283/signal-10-sigbus-in-c-library-when-running-application-as-launchd-daemon)
Однако все работает нормально, когда я запускаю приложение нормально. Мне интересно, есть ли какие-либо альтернативы launchd, которые я должен рассмотреть. Приложение должно запускаться при загрузке и запускаться, даже если ни один пользователь не вошел в систему. Было бы также желательно, чтобы приложение было перезапущено в случае сбоя, но я могу жить без этого, если потребуется.
Я провел некоторые исследования по элементам автозагрузки, но, поскольку они устарели, я опасаюсь, что Apple однажды просто уберет эту функциональность.
1 ответ
Нет. Скорее всего, вы столкнетесь с той же проблемой, что и любая другая альтернатива.
Не вдаваясь в подробности того, что очевидно из трассировки стека, которая является территорией StackOverflow:
Проблема почти наверняка кроется в другом состоянии процесса, которое имеет демон, по сравнению с программой, которую вы запускаете с рабочего стола или из оболочки. Переменные окружения, текущий каталог, лимиты ресурсов, дескрипторы открытых файлов, управляющие терминалы, корневой каталог и даже дополнительные группы могут - и для большинства из них - отличаться в процессе демона, запускаемом из супервизора демона, от процесса, вызванного в сеанс входа
Ваша проблема может быть в любой разнице между двумя. (Мое обоснованное предположение - переменные среды, из-за того, что находится в трассировке стека.) Но эти различия присущи демонам-супервизорам. Выполнение демонов с фиксированными, определяемыми состояниями процесса является частью их дизайна. Если вы замените другого администратора, вы все равно получите контролируемое состояние процесса, которое не соответствует состоянию процессов, запущенных в сеансе входа в систему.
Вы не должны рассматривать альтернативы launchd
, Вы должны посмотреть на свой список параметров и настроить его так, чтобы настроить нужные вещи (возможно, переменные среды, как я уже говорил), которые ваш драйвер ODBC ожидает сделать доступными для него. И вы должны читать любой 4D документ, который есть. ☺