Запущен поток порождения новых процессов

Я провожу небольшое исследование о том, как launchd загружает свои службы из файлов plist в /Library/LaunchDaemons/ или с помощью команды launchctl load

Пока что мне удалось собрать несколько различных источников и составить следующую, насколько я понимаю, расплывчатую картину:

При загрузке службы (launchctl load) Процесс launchctl отправляет launchd соответствующее сообщение XPC, а затем launchd разветвляется в новый процесс с контекстом xpcproxy. Этот общий процесс ожидает другого вызова XPC от launchd для запуска своего реального контекста процесса в соответствии с launchDaemon plst.

Это объяснение звучит правильно? возможно, кто-нибудь может помочь мне сделать его более точным?

Благодарность


person Irad K    schedule 12.03.2018    source источник


Ответы (1)


На самом деле это немного сложнее. Ядро состоит из двух частей: BSD и ядра mach; последний отвечает за управление памятью и планирование процессов.

Каждый процесс mach имеет одну или несколько задач mach (на самом деле права на порт задачи!). Когда приложение запускается впервые, у него есть только одно право - порт начальной загрузки, позволяющий взаимодействовать с launchd. Обратите внимание, что право на порт задачи является однонаправленным, поэтому процесс запуска, который имеет право взаимодействовать с launchd, должен дать право launchd на обратную связь с ним.

Когда launchd получает сообщение XPC, это зависит от Launch Daemon относительно того, какое действие он предпринимает. Возможно, сообщение предназначено для службы, которая работает с сетевым портом, который может работать или не работать. Если он запущен, он пересылает любые аргументы от вызывающего процесса в работающую службу. Если он не запущен, он может предоставить услугу по запросу, запустив сначала процесс.

В частности, вы спросили о launchctl load. Поскольку исходный код для launchd больше не является открытым, следующим лучшим ресурсом является работа Джонатана Левина по обратному проектированию; Автор внутренних компонентов Mac OS X и iOS и совсем недавно его новые самоизданные книги о * Внутренние устройства ОС .

Вы найдете его слайды о launchd здесь, но, вероятно, более полезной для вас является его версия launchctl , jlaunchctl, который является с открытым исходным кодом.

Наконец, если вы хотите просматривать содержимое сообщений XPC между процессами, отключите SIP и используйте бесценный XPoCe орудие труда.

person TheDarkKnight    schedule 13.03.2018