Жизненный цикл демона
Запуск пользовательской среды
Корневой процесс на OS X launchd
(который заменяет mach_init
и init
процессы, используемые в предыдущих версиях OS X и многих традиционных систем Unix). В дополнение к инициализации системы, launchd
обработайте координирует запуск системных демонов организованным способом. Как inetd
процесс, launchd
демоны запусков по требованию. Демоны запустились этим способом, может быть закрыт в течение периодов неактивности и повторно запущен по мере необходимости. Если демон не работает, когда входит запрос на обслуживание launchd
автоматически запускает демона для обработки запроса.
Запуск демонов по требованию высвобождает память и другие ресурсы, связанные с демоном, стоящим, если демон, вероятно, будет неактивен в течение длительных периодов времени. Что еще более важно, однако, это гарантирует, что зависимости во время выполнения между демонами удовлетворены без потребности в ручных списках зависимостей.
Как заключительная часть системной инициализации, launchd
запуски loginwindow
. loginwindow
программные управления несколько аспектов сеансов пользователя и координат дисплей окна входа в систему и аутентификация пользователей.
Для получения информации о более ранних частях процесса начальной загрузки посмотрите Ранний Процесс начальной загрузки в Руководстве по программированию Ядра.
Аутентификация пользователей
OS X требует, чтобы пользователи аутентифицировали себя до доступа к системе. loginwindow
программа координирует визуальную часть процесса входа в систему (как проявлено окном, где пользователи вводят информацию об имени и пароле), и часть безопасности (который обрабатывает аутентификацию пользователя). Как только пользователь аутентифицировался, loginwindow
начинает настраивать пользовательскую среду.
В двух ключевых ситуациях, loginwindow
обходит обычное приглашение ко входу в систему и сразу начинает сеанс пользователя. Когда системный администратор сконфигурировал компьютер для автоматического входа в систему как указанный пользователь, первая ситуация происходит. Когда программа установщика должна быть сразу запущена после перезагрузки, второе происходит во время установки программного обеспечения.
Конфигурирование сеансов пользователя
Сразу после того, как пользователь успешно аутентифицируется, loginwindow
устанавливает пользовательскую среду и записывает информацию о входе в систему. Как часть этого процесса, это выполняет следующие задачи:
Защищает сеанс входа в систему от несанкционированного удаленного доступа.
Записывает вход в систему в системе
utmp
иutmpx
базы данных.Устанавливает владельца и полномочия для консольного терминала.
Сбрасывает предпочтения пользователя для включения глобальных системных значений по умолчанию.
Конфигурирует мышь, клавиатуру, и система звучит как использование предпочтений пользователя.
Устанавливает полномочия группы пользователя (
gid
).Получает пользовательскую запись от Служб каталогов и применяет ту информацию к сеансу.
Загружает вычислительную среду пользователя (включая предпочтения, переменные окружения, устройство и полномочия файла, доступ цепочки для ключей, и т.д.).
Запускает прикрепление, средство поиска и SystemUIServer.
Запускает элементы входа в систему для пользователя.
Как только сеанс пользователя в порядке, loginwindow
контролирует приложения сеанса и пользовательские приложения следующими способами:
Это управляет выходом из системы, перезапуском и процедурами завершения работы. Посмотрите Ответственность за Выход из системы для получения дополнительной информации.
Это управляет окном Force Quit, включающим контроль в настоящее время активных приложений, и ответ на пользователя запрашивает к завершенным силой приложениям, и повторно запустите Средство поиска. (Пользователи открывают это окно из Меню Apple или путем нажатия Command-Option-Escape.)
Это принимает меры, чтобы любой вывод на стандартной погрешности был зарегистрирован с помощью API ASL. (См., что сообщения Журнала Используют API ASL.)
Ответственность за выход из системы
Процедуры для того, чтобы выйти из системы, перезапуская систему, или закрывая систему подобны. Типичный выход из системы/перезапуск/завершение работы имеет место следующим образом:
Пользователь выбирает Log Out, Restart или Shut Down из Меню Apple.
Приоритетное приложение подает пользовательскую заявку путем отправки события Apple в
loginwindow
. (См. Инициирование Выхода из системы, Перезапуска или Завершения работы для списка событий.) Для приложений Какао это сделано Набором Приложения.loginwindow
программа выводит на экран предупреждение пользователю, просящему подтверждение действия.Если пользователь подтверждает действие,
loginwindow
выходит из каждого приоритетного и фонового пользовательского процесса.Как только все процессы вышли,
loginwindow
заканчивает сеанс пользователя и выполняет выход из системы, перезапуск или завершение работы.
Завершение процессов
Как часть журнала, перезапуска или последовательности завершения работы, loginwindow
попытки завершить все приоритетные и фоновые пользовательские процессы.
Ваш процесс должен поддерживать внезапное завершение для лучшего пользовательского опыта. Посмотрите Ссылку класса NSProcessInfo для получения информации о том, как принять эту технологию. Если Ваш процесс поддерживает внезапное завершение, он просто отправляется a SIGKILL
сигнал. Если у Вас есть временно недоступное внезапное завершение, нормальный процесс ниже применяется.
Для приложений Какао завершение частично обрабатывается Набором Приложения, вызывающим applicationShouldTerminate:
метод делегата. Для прерывания последовательности завершения реализуйте этот метод и возврат NSTerminateCancel
; иначе, завершение Вашего приложения обычно продолжается.
Приложения некакао получают “событие Apple” Приложения Выхода (kAEQuitApplication
), как любезность, чтобы дать им шанс закрыться корректно. Процесс должен сразу завершить себя или отправить предупредительное диалоговое окно, если пользовательское подтверждение требуется (например, если существует несохраненный документ). Как только то условие разрешено, приложение должно завершиться. Если пользователь решает прервать последовательность завершения (путем щелчка по Cancel в диалоговом окне Сохранения, например), приложение должно реагировать на событие путем возврата a userCanceledErr
ошибка (-128
).
Если приоритетному приложению не удается ответить или завершить себя после 45 секунд, loginwindow
автоматически прерывает последовательность завершения. Эта гарантия должна защитить данные в различных ситуациях, такой как тогда, когда приложение сохраняет большой файл на диск и неспособно завершиться в выделенное время. Если приоритетное приложение безразлично и не делает что-нибудь, пользователь должен использовать окно Force Quit для выхода из него перед продолжением.
Для фоновых процессов процедура немного отличается. loginwindow
программа уведомляет процесс, что это собирается быть завершенным путем отправки ему события Quit Application Apple (kAEQuitApplication
). В отличие от приоритетных процессов, однако, loginwindow
не ожидает ответа. Это продолжается для завершения любых открытых фоновых процессов путем отправки a SIGKILL
сигнал, независимо от любых возвращенных ошибок.
Если система закрывается или перезапускается, она отправляет a SIGTERM
сигнализируйте всем демонам, сопровождаемым несколько секунд спустя SIGKILL
сигнал.
Инициирование выхода из системы, перезапуска или завершения работы
Для инициирования выхода из системы, перезапуска или последовательности завершения работы программно, приоритетное приложение должно отправить надлежащее событие Apple в loginwindow
. По получении события, loginwindow
начинает процесс закрытия сеанса пользователя.
Следующий список показывает предпочтительные события Apple для выхода из системы, перезапуска и процедур завершения работы. Эти события не имеют никаких обязательных параметров.
В дополнение к предпочтительным событиям Apple существует два говорящие дополнительных события loginwindow
продолжиться сразу с последовательностью завершения работы или перезапуском: