запуск
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Оригинальный автор(ы) | Дэйв Зажицки |
---|---|
Разработчик(и) | Apple Инк. |
Первоначальный выпуск | 29 апреля 2005 г |
Написано в | С |
Операционная система | macOS , FreeBSD , iOS , watchOS |
Тип | инициализации Демон |
Лицензия | Проприетарное программное обеспечение (ранее APSL , а затем Apache License 2.0 ) |
Веб-сайт | открытый исходный код ![]() |
launchd — это инициализации и управления службами операционной системы, демон созданный Apple Inc. как часть macOS в стиле BSD для замены init и SystemStarter . Были попытки портировать launchd на FreeBSD и производные системы.
Компоненты
[ редактировать ]В системе launchd есть две основные программы: launchd и launchctl.
launchd управляет демонами как на системном, так и на пользовательском уровне. Подобно xinetd, launchd может запускать демоны по требованию. Подобно watchdogd, launchd может отслеживать работу демонов, чтобы убедиться, что они продолжают работать. launchd также заменил init на PID 1 в macOS и в результате отвечает за запуск системы во время загрузки.
Файлы конфигурации определяют параметры служб, запускаемых launchd. , хранящиеся в подкаталогах LaunchAgents и LaunchDaemons папок библиотеки, Файлы на основе списка свойств содержат около тридцати различных ключей, которые можно установить. Сам launchd не знает этих файлов конфигурации и не имеет возможности их читать — за это отвечает «launchctl».
launchctl — это приложение командной строки, которое взаимодействует с launchd с помощью IPC и знает, как анализировать файлы списка свойств , используемые для описания заданий launchd, сериализуя их с использованием специализированного словарного протокола, который понимает launchd. launchctl можно использовать для загрузки и выгрузки демонов, запуска и остановки заданий, контролируемых launchd, получения статистики использования системы для launchd и его дочерних процессов, а также установки параметров среды.
запуск
[ редактировать ]launchd имеет две основные задачи. Первый — загрузка системы, второй — загрузка и обслуживание служб.
Вот упрощенное представление запуска системы Mac OS X Tiger на PowerPC Mac (на Intel Mac EFI заменяет Open Firmware и boot.efi
заменяет BootX ):
- Открытая прошивка активируется, инициализирует оборудование, а затем загружает BootX.
- BootX загружает ядро, вращает курсор-вертушку и загружает все необходимые расширения ядра (кексы).
- Ядро загружает launchd.
- launchd работает
/etc/rc
, различные скрипты, которые сканируют/System/Library/LaunchDaemons
и/Library/LaunchDaemons
, вызывая launchctl для plists по мере необходимости, затем launchd запускает окно входа в систему.
На шаге 4 сценарии запуска просматривают несколько разных каталогов в поисках заданий для запуска. Сканируются два разных каталога:
- Каталоги LaunchDaemons содержат элементы, которые будут запускаться от имени пользователя root, обычно это фоновые процессы.
- Каталоги LaunchAgents содержат задания, называемые приложениями-агентами, которые будут запускаться от имени пользователя или в контексте области пользователя. Это могут быть сценарии или другие элементы переднего плана, и они могут даже включать пользовательский интерфейс.
Все эти каталоги хранятся в типичных каталогах библиотеки Mac OS X.
launchd сильно отличается от SystemStarter тем, что он может не запускать все демоны во время загрузки. Ключевой особенностью launchd, как и xinetd, является идея запуска демонов по требованию. Когда launchctl просматривает списки заданий во время загрузки, он просит launchd зарезервировать и прослушивать все порты, запрошенные этими заданиями. Если это указано в списке с помощью ключа «OnDemand», демон в данный момент фактически не загружается. Скорее, launchd будет прослушивать порт, запускать демон, когда это необходимо, и закрывать его, когда он больше не нужен. После загрузки демона launchd будет отслеживать его и при необходимости проверять его работу. В этом смысле он похож на watchdogd и разделяет требование watchdogd о том, что процессы не пытаются самостоятельно разветвляться или демонизироваться. Если процесс переходит в фоновый режим, launchd потеряет его из виду и попытается перезапустить.
Следовательно, Mac OS X Tiger загружается намного быстрее, чем предыдущие версии. Системе необходимо только зарегистрировать демоны, которые должны быть запущены, и фактически не запускать их до тех пор, пока они не потребуются. Фактически, индикатор выполнения, который появляется во время загрузки, — это всего лишь приложение-плацебо (названное WaitingForLoginWindow [1] ), что на самом деле не показывает ничего, кроме течения времени.
Самая сложная часть управления во время загрузки launchd — это зависимости. SystemStarter имел очень простую систему зависимостей, в которой использовались ключи «Использует», «Требует» и «Предоставляет» в списке элемента автозагрузки. Существует две основные стратегии при создании зависимостей launchd на Tiger: IPC позволяет демонам общаться между собой для разработки зависимостей, или демоны могут отслеживать файлы или пути на предмет изменений. Использование IPC гораздо более тонкое, чем использование ключей SystemStarter, и требует больше усилий от разработчика, но может [ нужна ссылка ] приводят к более чистым и быстрым запускам. SystemStarter все еще поддерживался до OS X Mountain Lion , но был удален в OS X Yosemite .
запускctl
[ редактировать ]В launchd управление услугами централизовано в launchctl
приложение.
Сам по себе launchctl может принимать команды из командной строки, из стандартного интерфейса или работать в интерактивном режиме. Имея права суперпользователя , launchctl можно использовать для внесения изменений в глобальном масштабе. Набор команд launchctl можно сделать постоянным при сохранении в /etc/launchd.conf . для каждого пользователя , но он не поддерживается ни в одной существующей версии macOS. ~/.launchd.conf ( Похоже, что рассматривался файл [2] )
launchctl взаимодействует с launchd через механизм IPC, специфичный для Mach .
Список недвижимости
[ редактировать ]Список свойств (plist) — это тип файла, который launchd использует для конфигурации программы. Когда launchd сканирует папку или задание отправляется с помощью launchctl, он считывает файл plist, который описывает, как программа должна запускаться.
Список часто используемых клавиш приведен ниже. Все ключи являются необязательными, если не указано иное. Полный список см. на странице руководства Apple. launchd.plist
. [3]
Ключ | Тип | Описание |
---|---|---|
Label | Нить | Название работы. По соглашению метка задания совпадает с именем файла plist, но без расширения .plist . Необходимый . |
Program | Нить | Путь к исполняемому файлу. Полезно для простых запусков. По крайней мере один из Program или ProgramArguments требуется . |
ProgramArguments | Массив строк | Массив строк, представляющий команду UNIX. Первая строка обычно представляет собой путь к исполняемому файлу, а последние строки содержат параметры или параметры. По крайней мере один из Program или ProgramArguments требуется . |
UserName | Нить (по умолчанию root или текущий пользователь) | Задание будет запущено от имени данного пользователя, который может (а может и не быть) пользователем, отправившим его в launchd. |
OnDemand (Устарело с версии 10.5) | логическое значение (по умолчанию YES ) | Устарело с версии 10.5 с более мощной KeepAlive вариант. флаг Логический , определяющий, выполняется ли задание непрерывно или нет. |
RunAtLoad | логическое значение (по умолчанию NO ) | Логический флаг, определяющий , запускается ли задача сразу после загрузки задания в launchd. |
StartOnMount | логическое значение (по умолчанию NO ) | Логический флаг , определяющий, запускается ли задача при монтировании новой файловой системы. |
QueueDirectories | Массив строк | Следите за каталогом на предмет новых файлов. Каталог должен быть пустым с самого начала и должен быть возвращен в пустое состояние перед QueueDirectories снова запустит свою задачу. |
WatchPaths | Массив строк | Следите за путем к файловой системе на предмет изменений. Это может быть файл или папка. |
StartInterval | Целое число | Планирует выполнение задания по повторяющемуся расписанию. Указывает количество секунд ожидания между запусками. |
StartCalendarInterval | Словарь целых чисел или Массив словарей целых чисел | Планирование работы. Синтаксис аналогичен cron . |
RootDirectory | Нить | Перед выполнением задание будет помещено в этот каталог. |
WorkingDirectory | Нить | Перед выполнением задание будет перенаправлено в этот каталог. |
| Нить | Ключи для определения файлов ввода и вывода для запускаемого процесса. |
LowPriorityIO | логическое значение | Сообщает ядру, что эта задача имеет низкий приоритет при выполнении операций ввода-вывода файловой системы. |
AbandonProcessGroup | логическое значение (по умолчанию NO ) | Логический флаг, определяющий, будут ли подпроцессы, запущенные из задачи , запущенной с помощью launchd, завершаться после завершения задачи. Полезно, когда кратковременная задача запускает долгоживущую подзадачу, но может привести к зомбированию процессов . |
SessionCreate | логическое значение (по умолчанию NO ) | Логический флаг , определяющий, будет ли создан сеанс безопасности для задачи и ее подпроцессов. |
Протокол активации сокета
[ редактировать ]Имя каждого ключа в разделе «Сокеты» будет помещено в среду задания при его запуске, а файловый дескриптор этого сокета будет доступен в этой переменной среды. Это отличается от активации сокета в systemd тем, что имя определения сокета внутри конфигурации задания жестко закодировано в приложении. Этот протокол менее гибок, хотя он не требует, как это делает systemd, от демона жестко запрограммировать начальный дескриптор файла (по состоянию на 2014 год это 3). [4]
История
[ редактировать ]Программное обеспечение было разработано и написано Дэйвом Зажицки из Apple . Компания планировала заменить в средах OS X все следующее :
- нагревать
- RC
- init.d скрипт
- rc.d скрипт
- Системстартер
- инетд / ксинетд
- кронд / атд
- сторожевой пес
— и большинство из этих вещей были заменены, когда launchd был представлен в Mac OS X v10.4 (Tiger).
В 2005 году Р. Тайлер Крой портировал launchd на FreeBSD в рамках проекта Google Summer of Code. Его нельзя было запустить с PID 1 (только инициализация сеанса), и он не часто использовался на этой платформе. [5]
В 2006 году дистрибутив Ubuntu Linux рассматривал возможность использования launchd. Этот вариант был отклонен, поскольку исходный код подпадал под действие лицензии Apple Public Source License , что описывалось как «неизбежная проблема с лицензией». [6] Вместо этого Ubuntu разработала и перешла на собственный инструмент управления сервисами Upstart .
В августе 2006 года Apple повторно лицензировала под запуск версии 2.0 лицензией Apache, чтобы облегчить принятие ее другими разработчиками с открытым исходным кодом. [7] Большинство дистрибутивов Linux используют systemd или Upstart или продолжают с init , а BSD также продолжают с init.
В декабре 2013 года Р. Тайлер Крой объявил о своем намерении возобновить работу над портом launchd для FreeBSD, и активность его репозитория openlaunchd на GitHub впоследствии возросла. [8]
Последний раз Wayback Machine захватила область Mac OS Forge для запуска в июне 2012 года. [9] а самая последняя версия с открытым исходным кодом от Apple была 842.92.1 в коде для OS X 10.9.5.
В 2014 году в OS X 10.10 и iOS 8 Apple перенесла код для launchd в libxpc с закрытым исходным кодом. [10]
В августе 2015 года Джордан Хаббард и Кип Мэйси анонсировали NextBSD , которая основана на ядре FreeBSD-CURRENT с добавлением Mach IPC, Libdispatch, notified, asld, launchd и других компонентов, полученных из Darwin, открытого исходного кода Apple для OS X.
История выпусков Apple с открытым исходным кодом
[ редактировать ]См. также
[ редактировать ]- systemd : аналогичная утилита, разработанная Red Hat для использования в различных основных дистрибутивах Linux.
- Центр управления услугами
- Супер-сервер
- TCP-оболочка
- Управление службами операционной системы
Ссылки
[ редактировать ]- ^ «Детали тигра» . Дерзкий огненный шар . Окно ожидания входа в систему . Проверено 23 февраля 2020 г.
- ^ Страница руководства Mac OS X для launchd.conf(5)
- ^ «Страница руководства Mac OS X для launchd.plist(5)» . веб.архив.орг . 26 августа 2009 года . Проверено 15 июля 2024 г.
- ^ Little-Big-h (30 января 2014 г.). "запущенный узел" . Проверено 10 апреля 2014 г.
- ^ «Запущен» . Вики FreeBSD . Проверено 8 декабря 2013 г.
- ^ «ЗаменаИнит» . УбунтуВики . Проверено 2 июля 2007 г.
- ^ Прабхакар, Эрнест (7 августа 2006 г.). «Apple открывает: ядро, Mac OS Forge, iCal Server, Bonjour, Launchd» . darwin-dev (список рассылки) . Проверено 25 марта 2023 г.
- ^ Крой, Р. Тайлер. «Самая царапающая борода или FreeBSD на моем Thinkpad X200» . unethicalblogger.com . Архивировано из оригинала 13 ноября 2017 года . Проверено 8 декабря 2013 г.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ "запустил" . Мак ОС Фордж . Apple Inc. Архивировано из оригинала 9 июня 2012 года . Проверено 3 сентября 2016 г.
- ^ Левин, Джонатан (2014). «Запущен – к вашим услугам!» (PDF) . п. 32 . Проверено 3 сентября 2016 г.
… 10.10: перенесен на libxpc 559 (560 в iOS 8) — Исходный код пока недоступен — и, возможно, никогда не будет — Libxpc — это проект с закрытым исходным кодом…
- ^ «файл лицензии launchd 106» .
- ^ «Mac OS X 10.4 — Исходный код» .
- ^ «Mac OS X 10.4.1 — Исходный код» .
- ^ «файл лицензии launchd 106.3» .
- ^ «Mac OS X 10.4.2 — Исходный код» .
- ^ «Mac OS X 10.4.3 — Исходный код» .
- ^ «Mac OS X 10.4.4.ppc — Исходный код» .
- ^ «Mac OS X 10.4.5.ppc — Исходный код» .
- ^ «файл лицензии launchd 106.10» .
- ^ «Mac OS X 10.4.4.x86 — Исходный код» .
- ^ «Mac OS X 10.4.5.x86 — Исходный код» .
- ^ «файл лицензии launchd 106.13» .
- ^ «Mac OS X 10.4.6.ppc — Исходный код» .
- ^ «Mac OS X 10.4.6.x86 — Исходный код» .
- ^ «файл лицензии launchd 106.14» .
- ^ «Mac OS X 10.4.7.ppc — Исходный код» .
- ^ «Mac OS X 10.4.7.x86 — Исходный код» .
- ^ «Mac OS X 10.4.8.ppc — Исходный код» .
- ^ «Mac OS X 10.4.9.ppc — Исходный код» .
- ^ «Mac OS X 10.4.10.ppc — Исходный код» .
- ^ «Mac OS X 10.4.11.ppc — Исходный код» .
- ^ «файл лицензии launchd 106.20» .
- ^ «Mac OS X 10.4.8.x86 — Исходный код» .
- ^ «Mac OS X 10.4.9.x86 — Исходный код» .
- ^ «Mac OS X 10.4.10.x86 — Исходный код» .
- ^ «Mac OS X 10.4.11.x86 — Исходный код» .
- ^ «Инструменты разработчика 2.4 — Исходный код» .
- ^ «файл лицензии launchd 152» .
- ^ «файл лицензии launchd 257» .
- ^ «Mac OS X 10.5 — Исходный код» .
- ^ «Mac OS X 10.5.1 — Исходный код» .
- ^ «Инструменты разработчика 3.1 — Исходный код» .
- ^ «Инструменты разработчика 3.1b — Исходный код» .
- ^ «Инструменты разработчика 3.1.1 — Исходный код» .
- ^ «Инструменты разработчика 3.1.2 — Исходный код» .
- ^ «Инструменты разработчика 3.1.3 — Исходный код» .
- ^ «Инструменты разработчика 3.1.4 — Исходный код» .
- ^ «запуск файла лицензии 258.1» .
- ^ «Mac OS X 10.5.2 — Исходный код» . Архивировано из оригинала 21 сентября 2020 года . Проверено 19 августа 2019 г.
- ^ «запуск файла лицензии 258.12» .
- ^ «Mac OS X 10.5.3 — Исходный код» .
- ^ «Mac OS X 10.5.4 — Исходный код» .
- ^ «файл лицензии launchd 258.18» .
- ^ «Mac OS X 10.5.5 — Исходный код» .
- ^ «файл лицензии launchd 258.19» .
- ^ «Mac OS X 10.5.6 — Исходный код» .
- ^ «файл лицензии launchd 258.22» .
- ^ «Mac OS X 10.5.7 — Исходный код» .
- ^ «файл лицензии launchd 258.25» .
- ^ «Mac OS X 10.5.8 — Исходный код» .
- ^ «файл лицензии launchd 328» .
- ^ «Mac OS X 10.6 — Исходный код» .
- ^ «Mac OS X 10.6.1 — Исходный код» .
- ^ «Mac OS X 10.6.2 — Исходный код» .
- ^ «Инструменты разработчика 3.2.1 — Исходный код» .
- ^ «Инструменты разработчика 3.2.2 — Исходный код» .
- ^ «Инструменты разработчика 3.2.3 — Исходный код» .
- ^ «Инструменты разработчика 3.2.4 — Исходный код» .
- ^ «запуск файла лицензии 329.3» .
- ^ «Mac OS X 10.6.3 — Исходный код» .
- ^ «запуск файла лицензии 329.3.1» .
- ^ «Mac OS X 10.6.4 — Исходный код» .
- ^ «Инструменты разработчика 3.2.5 — Исходный код» .
- ^ «Инструменты разработчика 3.2.6 — Исходный код» .
- ^ «запуск файла лицензии 329.3.2» .
- ^ «Mac OS X 10.6.5 — Исходный код» .
- ^ «запуск файла лицензии 329.3.3» .
- ^ «Mac OS X 10.6.6 — Исходный код» .
- ^ «Mac OS X 10.6.7 — Исходный код» .
- ^ «Mac OS X 10.6.8 — Исходный код» .
- ^ «файл лицензии launchd 392.18» .
- ^ «Mac OS X 10.7 — Исходный код» .
- ^ «Mac OS X 10.7.1 — Исходный код» .
- ^ «запуск файла лицензии 392.35» .
- ^ «Mac OS X 10.7.2 — Исходный код» .
- ^ «запуск файла лицензии 392.36» .
- ^ «Mac OS X 10.7.3 — Исходный код» .
- ^ «запуск файла лицензии 392.38» .
- ^ «Mac OS X 10.7.4 — Исходный код» .
- ^ «запуск файла лицензии 392.39» .
- ^ «Mac OS X 10.7.5 — Исходный код» .
- ^ «заголовок лицензии в исходном коде launchd 442.21» .
- ^ «Mac OS X 10.8 — Исходный код» .
- ^ «Mac OS X 10.8.1 — Исходный код» .
- ^ «заголовок лицензии в исходном коде launchd 442.26.2» .
- ^ «Mac OS X 10.8.2 — Исходный код» .
- ^ «Mac OS X 10.8.3 — Исходный код» .
- ^ «Mac OS X 10.8.4 — Исходный код» .
- ^ «Mac OS X 10.8.5 — Исходный код» .
- ^ «заголовок лицензии в исходном коде launchd 842.1.4» .
- ^ «OS X 10.9 — Исходный код» .
- ^ «OS X 10.9.1 — Исходный код» .
- ^ «заголовок лицензии в исходном коде launchd 842.90.1» .
- ^ «OS X 10.9.2 — Исходный код» .
- ^ «OS X 10.9.3 — Исходный код» .
- ^ «заголовок лицензии в исходном коде launchd 842.92.1» .
- ^ «OS X 10.9.4 — Исходный код» .
- ^ «OS X 10.9.5 — Исходный код» .
Внешние ссылки
[ редактировать ]Разработчик Apple:
- Библиотека разработчика Mac: Руководство по программированию демонов и служб: Создание демонов и агентов запуска
- Библиотека разработчиков Mac: Техническое примечание TN2083: Демоны и агенты
Библиотека устаревших документов разработчиков Apple:
- Darwin и macOS системного администратора Руководство : Общесистемный менеджер демонов и индивидуальный менеджер агентов для каждого пользователя –
- Darwin и macOS по форматам файлов Руководство –
- Darwin и macOS по форматам файлов Руководство –
- Darwin и macOS по общим командам Руководство –
Другие ссылки:
- Библиотека разработчиков Apple: начало работы с launchd на Wayback Machine (архивировано 4 июля 2007 г.)
- Запущено: Одна программа, чтобы управлять ими всеми - YouTube - презентация Дэйва Заржицкого, загруженная GoogleTechTalks 8 октября 2007 г.
- неделя
.freebsd .org /запуск - разработчик
.яблоко .с /библиотека /архив /документация /MacOSX /Концептуальный /BPSystemStartup /