ज़ायगोट, Android ऑपरेटिंग सिस्टम में एक प्रोसेस है. यह एक ही ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) के साथ, सिस्टम और ऐप्लिकेशन की सभी प्रोसेस के रूट के तौर पर काम करती है.
Pixel 7 और उसके बाद के वर्शन वाले आधुनिक डिवाइसों पर, 64-बिट Zygote प्रोसेस होती है. इसके अलावा, प्राइमरी ABI के लिए WebView Zygote होता है. यह एक खास तरह का Zygote होता है. इसमें ऐसी लाइब्रेरी और संसाधन होते हैं जो WebViews चलाने वाली प्रोसेस के लिए खास होते हैं.
Zygote ये काम करता है:
Android OS के शुरू होने पर, init डीमन Zygote प्रोसेस को शुरू करता है. कुछ ड्यूअल आर्किटेक्चर सिस्टम पर, दो Zygote प्रोसेस (एक 64-बिट और दूसरी 32-बिट) शुरू होती हैं. इस पेज पर, सिर्फ़ सिंगल आर्किटेक्चर सिस्टम के बारे में बताया गया है.
Zygote, अनस्पेशलाइज़्ड ऐप्लिकेशन प्रोसेस (यूएसएपी) नाम की प्रोसेस को तुरंत शुरू कर सकता है. इसके अलावा, यह ऐप्लिकेशन की ज़रूरत के हिसाब से प्रोसेस शुरू करने के लिए इंतज़ार भी कर सकता है. पहले विकल्प को सिस्टम प्रॉपर्टी या Android डीबग ब्रिज कमांड के ज़रिए चालू किया जाना चाहिए. प्रोसेस को तुरंत शुरू करने के लिए, Zygote को कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन की सामान्य प्रोसेस के पूल को चालू करें लेख पढ़ें.
अगर आपके डिवाइस पर यूएसएपी पूल की सुविधा चालू है, तो:
- सिस्टम सर्वर, पूल से उपलब्ध यूएसएपी से कनेक्ट करने के लिए, Unix डोमेन सॉकेट का इस्तेमाल करता है. सिस्टम सर्वर अनुरोध करता है कि यूएसएपी को ऐप्लिकेशन के इस्तेमाल के लिए पहले से कॉन्फ़िगर किया जाए. इसके लिए, प्रोसेस के आईडी (पीआईडी), सीग्रुप, और अन्य जानकारी में बदलाव किया जाता है.
- जब यूएसएपी को पहले से कॉन्फ़िगर कर दिया जाता है, तो वह सिस्टम सर्वर को पीआईडी का जवाब देता है.
- जब कोई ऐप्लिकेशन इनमें से किसी यूएसएपी का इस्तेमाल करता है, तो वह यूएसएपी पूल का हिस्सा नहीं रहता. जब पूल में एक या इससे कम यूएसएपी बचते हैं, तो ज़ायगोट, पूल में नए यूएसएपी जोड़ता है.
अगर आपका Zygote, लेज़ी इवैलुएशन का इस्तेमाल करके प्रोसेस शुरू करता है, तो:
- सिस्टम सर्वर को यह निर्देश मिलता है कि किसी ऐप्लिकेशन को प्रोसेस करने की ज़रूरत है.
- सिस्टम सर्वर, Unix डोमेन सॉकेट का इस्तेमाल करके, सही Zygote को कमांड भेजता है.
- Zygote, प्रोसेस को फ़ोर्क करता है और PID, cgroup, और अन्य जानकारी बदलता है.
- प्रोसेस पूरी होने पर, यह PID को वापस Zygote को भेजता है. इसके बाद, Zygote इसे वापस सिस्टम सर्वर को भेज देता है.
USAP पूल चालू करें
यूएसएपी पूल का इस्तेमाल करने की सुविधा चालू करने के लिए, इनमें से कोई एक काम करें:
/build/make/target/product/runtime_libart.mkमें,dalvik.vm.usap_pool_enabledसिस्टम प्रॉपर्टी कोtrueपर सेट करें.यह कमांड चलाएं:
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 से जुड़ी गड़बड़ियां या IO से जुड़ी गड़बड़ियां मिल रही हैं, तो:
बिना नाम वाले फ़ाइल डिस्क्रिप्टर के लिए,
fds_to_ignoreको कॉल करते समय,fds_to_ignoreवेक्टर में फ़ाइल डिस्क्रिप्टर शामिल करें.Restatनाम वाले फ़ाइल डिस्क्रिप्टर के लिए:
WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cppमें बदलाव करें.- खुली हुई फ़ाइलों के लिए, अनुमति वाली सूची में पाथ जोड़ें.