Жизненный цикл демона

Запуск пользовательской среды

Корневой процесс на OS X launchd (который заменяет mach_init и init процессы, используемые в предыдущих версиях OS X и многих традиционных систем Unix). В дополнение к инициализации системы, launchd обработайте координирует запуск системных демонов организованным способом. Как inetd процесс, launchd демоны запусков по требованию. Демоны запустились этим способом, может быть закрыт в течение периодов неактивности и повторно запущен по мере необходимости. Если демон не работает, когда входит запрос на обслуживание launchd автоматически запускает демона для обработки запроса.

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

Как заключительная часть системной инициализации, launchd запуски loginwindow. loginwindow программные управления несколько аспектов сеансов пользователя и координат дисплей окна входа в систему и аутентификация пользователей.

Для получения информации о более ранних частях процесса начальной загрузки посмотрите Ранний Процесс начальной загрузки в Руководстве по программированию Ядра.

Аутентификация пользователей

OS X требует, чтобы пользователи аутентифицировали себя до доступа к системе. loginwindow программа координирует визуальную часть процесса входа в систему (как проявлено окном, где пользователи вводят информацию об имени и пароле), и часть безопасности (который обрабатывает аутентификацию пользователя). Как только пользователь аутентифицировался, loginwindow начинает настраивать пользовательскую среду.

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

Конфигурирование сеансов пользователя

Сразу после того, как пользователь успешно аутентифицируется, loginwindow устанавливает пользовательскую среду и записывает информацию о входе в систему. Как часть этого процесса, это выполняет следующие задачи:

Как только сеанс пользователя в порядке, loginwindow контролирует приложения сеанса и пользовательские приложения следующими способами:

Ответственность за выход из системы

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

  1. Пользователь выбирает Log Out, Restart или Shut Down из Меню Apple.

  2. Приоритетное приложение подает пользовательскую заявку путем отправки события Apple в loginwindow. (См. Инициирование Выхода из системы, Перезапуска или Завершения работы для списка событий.) Для приложений Какао это сделано Набором Приложения.

  3. loginwindow программа выводит на экран предупреждение пользователю, просящему подтверждение действия.

  4. Если пользователь подтверждает действие, loginwindow выходит из каждого приоритетного и фонового пользовательского процесса.

  5. Как только все процессы вышли, 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 продолжиться сразу с последовательностью завершения работы или перезапуском: