#macos #launchd #xpc
#macos #запуск #xpc
Вопрос:
Когда процесс приложения запускает вспомогательный процесс XPC, он фактически не выполняет сам fork() / exec() в классическом стиле UNIX. Вместо этого он отправляет сообщение в launchd, который выполняет за него грязную работу. Таким образом, если вы запрашиваете родительский процесс в процессе XPC, он возвращается как процесс launchd.
Однако, если вы откроете Activity Monitor в представлении иерархических процессов, все вспомогательные процессы XPC будут показаны под исходным приложением, которое их запросило, например:
В программном обеспечении, над которым я работаю, знание этой взаимосвязи между процессами было бы чрезвычайно полезно. До сих пор мы использовали обычную информацию о родительском процессе BSD, но поскольку все движется к XPC, это больше не имеет смысла.
Итак:
- Где хранится «исходная» информация о родительском процессе для процессов XPC?
- Как Activity Monitor получает к нему доступ?
Здесь задействован kext, поэтому я был бы рад извлечь эту информацию прямо в ядре, а не в пользовательском пространстве, но, похоже, я даже не могу понять, где она хранится.
Обновление: обсуждение списка рассылки Apple darwin-kernel: http://lists.apple.com/archives/darwin-kernel/2015/Mar/msg00001.html
Комментарии:
1. 1 интересный вопрос на этом сайте на этот раз!
2. Я тоже пытался разобраться с этим!
3. Это может иметь отношение к вам: apple.stackexchange.com/questions/327290 /…
Ответ №1:
Я полагаю, что launchd знает, что вы ищете.
В структуре управления службами есть метод, который может легко предоставить вам то, что вы ищете.
CFDictionaryRef SMJobCopyDictionary(CFStringRef domain, CFStringRef jobLabel);
функция.
Комментарии:
1. Обратите внимание, что из документов предварительной версии OSX похоже, что эта функция может быть устаревшей в Yosemite (10.10): developer.apple.com/library/prerelease/mac/documentation /…
2. Я не думаю, что SMJobCopyDictionary поможет здесь. Как вы можете видеть, это записи в словаре для Safari: pastebin.com/QAgDEUim
3. Да, мне тоже не очень повезло с этой функцией.