Разрабатывающие демоны и службы

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

Типы фоновых процессов

Существует четыре типа фоновых процессов в OS X. Различия получены в итоге в Таблице 1-1 и описаны подробно в следующих подразделах. Для выбора надлежащего типа фонового процесса рассмотрите следующее:

Табличные 1-1  типы фонового процесса

Ввести

Управляемый launchd?

Выполненный то, в который контекст?

Может представить UI?

Элемент входа в систему

Нет*

Пользователь

Да

Служба XPC

Да

Пользователь

Нет

(Кроме очень ограниченного способа использовать IOSurface)

Демон запуска

Да

Система

Нет

Агент запуска

Да

Пользователь

Не рекомендуемый

* элементы Входа в систему запускаются экземпляром в расчете на пользователя launchd, но это не принимает мер для управления ими.

Для получения дополнительной информации о системе и пользовательских контекстах, посмотрите, что Многопользовательская Среда Программирует Темы.

Элементы входа в систему

Элементы входа в систему запускаются, когда пользователь входит в систему, и продолжайте работать, пока пользователь не выходит из системы или вручную выходит из них. Их основная цель состоит в том, чтобы позволить пользователям открывать часто используемые приложения автоматически, но они могут также использоваться разработчиками приложений. Например, элемент входа в систему может использоваться, чтобы вывести на экран дополнительное меню или зарегистрировать глобальную горячую клавишу.

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

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

Для получения информации о том, как создать элемент входа в систему, посмотрите Добавляющие Элементы Входа в систему.

XPC Services

Службами XPC управляют launchd и предоставьте услуги отдельному приложению. Они обычно используются для деления приложения на меньшие части. Это может использоваться для улучшения надежности путем ограничения влияния, если процесс отказывает, и улучшить безопасность путем ограничения влияния, если процесс поставился под угрозу.

С традиционными одно-исполнимыми приложениями, если какая-либо часть сбоев приложения, завершается целое приложение. Путем реструктурирования приложения в основной процесс и службы, влияние катастрофического отказа в службе значительно меньше. Пользователь может продолжать работать; отказавшая служба повторно запускается. Например, почтовая программа может использовать службу XPC для обработки связи с почтовым сервером. Даже если служба отказывает, временно прерывая связь с сервером, остальная часть приложения остается применимой.

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

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

Для получения информации о том, как создать службу XPC, посмотрите Creating XPC Services.

Демоны запуска

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

Большинство демонов работает в системном контексте системы — т.е. они работают на самом низком уровне системы и делают свои службы доступными для всех сеансов пользователя. Демоны на этом уровне продолжают работать, даже когда ни в каких пользователей не входят система, таким образом, программа демона не должна иметь никаких сведений из первоисточника пользователей. Вместо этого демон должен ожидать пользовательской программы, чтобы связаться с ним и выполнить запрос. Как часть того запроса, пользовательская программа обычно говорит демону, как возвратить любые результаты.

Для получения информации о том, как создать демона запуска, посмотрите Демонов Запуска Создания и Агенты.

Агенты запуска

Агентами управляют launchd, но выполняются от имени, в настоящее время входил в систему пользователь (т.е. в пользовательском контексте). Агенты могут связаться с другими процессами в тот же сеанс пользователя и с демонами в масштабе всей системы в системном контексте. Они могут вывести на экран визуальный интерфейс, но это не рекомендуется.

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

Для получения информации о том, как создать демона запуска, посмотрите Демонов Запуска Создания и Агенты.

Протоколы для связи с демонами

Существует четыре главных механизма связи, обычно используемые между демонами и их клиентами: XPC, традиционная связь клиент-сервер (включая события Apple, TCP/IP, UDP, другой сокет и механизмы канала), вызовы удаленной процедуры (включая Маха RPC, Sun RPC и Распределенные Объекты), и отображение памяти (используемый под Базовой Графикой APIs, среди других).

XPC является самым простым способом запуститься и связаться с Вашим демоном. Для получения дополнительной информации при реализации этого механизма, посмотрите Creating XPC Services и XPC Services Ссылка API.

Другой RPC (вызов удаленной процедуры), механизмов, таких как Распределенные Объекты нужно избежать для коммуникации через границы домена защиты, например пользовательский процесс, связывающийся с демоном системного уровня, потому что это создает угрозу безопасности. Они являются надлежащими только, когда можно быть уверены, что оба включенные процесса имеют тот же уровень полномочий.

В большинстве других случаев необходимо использовать традиционную коммуникацию клиент-сервер API. Код на основе этого APIs имеет тенденцию быть проще понять, отладить, и поддержать, чем RPC или проекты отображения памяти. Это также имеет тенденцию быть более переносимым на другие платформы, чем основанный на RPC код. Для получения дополнительной информации при реализации использования TCP/IP, считайте Сетевой Обзор.

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

Просмотр в настоящее время рабочих демонов

Если Вы хотите видеть, что демоны, в настоящее время работающие на Вашей системе, используют приложение Монитора Действия (расположенный в /Applications/Utilities). Это приложение позволяет Вам просмотреть информацию обо всех процессах включая их использование ресурсов. Рисунок 1-1 показывает Окно монитора Действия и информацию о процессе.

  Процессы рисунка 1-1, показанные в Мониторе Действия
Processes shown in Activity Monitor