На самом деле это немного сложнее. Ядро состоит из двух частей: 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