О процессах зиготы

Zygote — это процесс в операционной системе Android, который действует как корневой элемент всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).

На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.

Вот задачи, которые выполняет Зигота:

  1. Демон инициализации запускает процесс Zygote при инициализации ОС Android. В некоторых системах с двойной архитектурой создаются два процесса Zygote (64-битный и 32-битный). На этой странице описаны только системы с одной архитектурой.

  2. Zygote может немедленно запускать процессы, называемые неспециализированными процессами приложений (USAP), или ждать, чтобы запустить процессы, необходимые приложениям. Первый вариант необходимо включить с помощью системного свойства или команды моста отладки Android. Дополнительные сведения о настройке Zygote для немедленного запуска процессов см. в разделе Включение пула неспециализированных процессов приложения .

    • Если пул USAP включен на вашем устройстве:

      1. Системный сервер использует сокет домена Unix для подключения к доступному USAP из пула. Системный сервер запрашивает предварительную настройку USAP для использования приложением, изменяя идентификатор процесса (PID), cgroup и другую информацию.
      2. Когда USAP завершает предварительную настройку, он отправляет системному серверу ответ PID.
      3. Когда приложение занимает один из этих USAP, этот USAP больше не является частью пула. Когда пул достигает одного или нескольких USAP в пуле, Zygote пополняет пул новыми USAP.
    • Если ваша Zygote порождает процессы с использованием отложенной оценки :

      1. Системный сервер получает команду о том, что приложению нужен процесс.
      2. Системный сервер использует сокет домена Unix для отправки команды соответствующему Zygote.
      3. Зигота разветвляет процесс и меняет PID, контрольную группу и другую информацию.
      4. Когда процесс завершен, он отправляет PID обратно в Zygote, который затем передает его обратно на системный сервер.

Включить пул USAP

Чтобы включить использование пула USAP, выполните одно из следующих действий:

  • Установите для системного свойства dalvik.vm.usap_pool_enabled значение true в /build/make/target/product/runtime_libart.mk .

  • Выполните следующую команду:

    adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
    

Когда эта функция включена, каждый Zygote поддерживает пул разветвленных процессов, которые выполняют независимые от приложения части процесса запуска приложения.

Устранение проблем с зиготой

В этом разделе представлены решения проблем, связанных с Zygote.

Зигота терпит крах

Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.

Отказы SELinux или сбои ввода-вывода

Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Если файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup для /dev/null , чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.

Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:

  • Для безымянных файловых дескрипторов включите их в вектор fds_to_ignore при вызове Restat .

  • Для именованных файловых дескрипторов:

    1. Отредактируйте WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp .
    2. Добавьте путь в список разрешенных для открытых файлов.
,

Zygote — это процесс в операционной системе Android, который выступает в качестве корня всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).

На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.

Вот задачи, которые выполняет Зигота:

  1. Демон инициализации запускает процесс Zygote при инициализации ОС Android. В некоторых системах с двойной архитектурой создаются два процесса Zygote (64-битный и 32-битный). На этой странице описаны только системы с одной архитектурой.

  2. Zygote может немедленно запускать процессы, называемые неспециализированными процессами приложений (USAP), или ждать, чтобы запустить процессы, необходимые приложениям. Первый вариант необходимо включить с помощью системного свойства или команды моста отладки Android. Дополнительные сведения о настройке Zygote для немедленного запуска процессов см. в разделе Включение пула неспециализированных процессов приложения .

    • Если пул USAP включен на вашем устройстве:

      1. Системный сервер использует сокет домена Unix для подключения к доступному USAP из пула. Системный сервер запрашивает предварительную настройку USAP для использования приложением, изменяя идентификатор процесса (PID), cgroup и другую информацию.
      2. Когда USAP завершает предварительную настройку, он отправляет системному серверу ответ PID.
      3. Когда приложение занимает один из этих USAP, этот USAP больше не является частью пула. Когда пул достигает одного или нескольких USAP в пуле, Zygote пополняет пул новыми USAP.
    • Если ваша Zygote порождает процессы с использованием отложенной оценки :

      1. Системный сервер получает команду о том, что приложению нужен процесс.
      2. Системный сервер использует сокет домена Unix для отправки команды соответствующему Zygote.
      3. Зигота разветвляет процесс и меняет PID, контрольную группу и другую информацию.
      4. Когда процесс завершен, он отправляет PID обратно в Zygote, который затем передает его обратно на системный сервер.

Включить пул USAP

Чтобы включить использование пула USAP, выполните одно из следующих действий:

  • Установите для системного свойства dalvik.vm.usap_pool_enabled значение true в /build/make/target/product/runtime_libart.mk .

  • Выполните следующую команду:

    adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
    

Когда эта функция включена, каждый Zygote поддерживает пул разветвленных процессов, которые выполняют независимые от приложения части процесса запуска приложения.

Устранение проблем с зиготой

В этом разделе представлены решения проблем, связанных с Zygote.

Зигота терпит крах

Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.

Отказы SELinux или сбои ввода-вывода

Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Когда файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup для /dev/null , чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.

Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:

  • Для безымянных файловых дескрипторов включите их в вектор fds_to_ignore при вызове Restat .

  • Для именованных файловых дескрипторов:

    1. Отредактируйте WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp .
    2. Добавьте путь в список разрешенных для открытых файлов.
,

Zygote — это процесс в операционной системе Android, который действует как корневой элемент всех процессов системы и приложений с одним и тем же двоичным интерфейсом приложения (ABI).

На современных устройствах, таких как Pixel 7 и новее, присутствует 64-битный процесс Zygote. Кроме того, существует WebView Zygote для основного ABI, который представляет собой специализированный Zygote, содержащий библиотеки и ресурсы, специфичные для процессов, запускающих WebViews.

Вот задачи, которые выполняет Зигота:

  1. Демон инициализации запускает процесс Zygote при инициализации ОС Android. В некоторых системах с двойной архитектурой создаются два процесса Zygote (64-битный и 32-битный). На этой странице описаны только системы с одной архитектурой.

  2. Zygote может немедленно запускать процессы, называемые неспециализированными процессами приложений (USAP), или ждать, чтобы запустить процессы, необходимые приложениям. Первый вариант необходимо включить с помощью системного свойства или команды моста отладки Android. Дополнительные сведения о настройке Zygote для немедленного запуска процессов см. в разделе Включение пула неспециализированных процессов приложения .

    • Если пул USAP включен на вашем устройстве:

      1. Системный сервер использует сокет домена Unix для подключения к доступному USAP из пула. Системный сервер запрашивает предварительную настройку USAP для использования приложением, изменяя идентификатор процесса (PID), cgroup и другую информацию.
      2. Когда USAP завершает предварительную настройку, он отправляет системному серверу ответ PID.
      3. Когда приложение занимает один из этих USAP, этот USAP больше не является частью пула. Когда пул достигает одного или нескольких USAP в пуле, Zygote пополняет пул новыми USAP.
    • Если ваша Zygote порождает процессы с использованием отложенной оценки :

      1. Системный сервер получает команду о том, что приложению нужен процесс.
      2. Системный сервер использует сокет домена Unix для отправки команды соответствующему Zygote.
      3. Зигота разветвляет процесс и меняет PID, контрольную группу и другую информацию.
      4. Когда процесс завершен, он отправляет PID обратно в Zygote, который затем передает его обратно на системный сервер.

Включить пул USAP

Чтобы включить использование пула USAP, выполните одно из следующих действий:

  • Установите для системного свойства dalvik.vm.usap_pool_enabled значение true в /build/make/target/product/runtime_libart.mk .

  • Выполните следующую команду:

    adb shell am broadcast -a \"com.google.android.gms.phenotype.FLAG_OVERRIDE\" --es package \"com.google.android.platform.runtime_native\" --es user \"\*\" --esa flags \"usap_pool_enabled\" --esa values \"true\" --esa types \"string\" com.google.android.gms
    

Когда эта функция включена, каждый Zygote поддерживает пул разветвленных процессов, которые выполняют независимые от приложения части процесса запуска приложения.

Устранение проблем с зиготой

В этом разделе представлены решения проблем, связанных с Zygote.

Зигота терпит крах

Если ваше устройство не перезагружается должным образом, а ваши журналы или отчеты о сбоях показывают проблемы с Zygote, вероятно, это связано с тем, что вы внесли недавнее изменение, которое приводит к сбою initd или системного сервера. Исправление вашего кода должно решить проблему.

Отказы SELinux или сбои ввода-вывода

Zygote уделяет особое внимание гигиене файловых дескрипторов за пределами границ процесса. Если файловые дескрипторы присутствуют во время разветвления, но не в списке разрешенных, мы используем системный вызов dup для /dev/null , чтобы предотвратить непреднамеренное использование кэшированных файловых дескрипторов для доступа к вновь открываемым файлам.

Если вы вносите изменения в структуру, в том числе пытаетесь загрузить ресурсы в Zygote, и получаете отказы SELinux или сбои ввода-вывода:

  • Для безымянных файловых дескрипторов включите их в вектор fds_to_ignore при вызове Restat .

  • Для именованных файловых дескрипторов:

    1. Отредактируйте WORKING_DIRECTORY /frameworks/base/core/jni/fd_utils.cpp .
    2. Добавьте путь в список разрешенных для открытых файлов.