Как OSX Activity Monitor сопоставляет задачи XPC с их процессом-инициатором?

#macos #launchd #xpc

#macos #запуск #xpc

Вопрос:

Когда процесс приложения запускает вспомогательный процесс XPC, он фактически не выполняет сам fork() / exec() в классическом стиле UNIX. Вместо этого он отправляет сообщение в launchd, который выполняет за него грязную работу. Таким образом, если вы запрашиваете родительский процесс в процессе XPC, он возвращается как процесс launchd.

Однако, если вы откроете Activity Monitor в представлении иерархических процессов, все вспомогательные процессы XPC будут показаны под исходным приложением, которое их запросило, например:

Пример помощника XPC для Safari, показывающий launchd как родительский процесс

В программном обеспечении, над которым я работаю, знание этой взаимосвязи между процессами было бы чрезвычайно полезно. До сих пор мы использовали обычную информацию о родительском процессе 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. Да, мне тоже не очень повезло с этой функцией.