Zygote প্রসেস সম্পর্কে

Zygote হল Android অপারেটিং সিস্টেমের একটি প্রসেস যা একই অ্যাপ্লিকেশন বাইনারি ইন্টারফেস (ABI) সহ সমস্ত সিস্টেম এবং অ্যাপ প্রসেসের রুট হিসাবে কাজ করে।

Pixel 7 ও এর পরের যেকোনও ডিভাইসের মতো আধুনিক ডিভাইসে, ৬৪-বিট Zygote প্রসেস আছে। এছাড়াও, প্রাথমিক ABI-এর জন্য WebView Zygote আছে, এটি হল বিশেষ Zygote যেখানে WebView রান করে এমন প্রসেস-নির্দিষ্ট লাইব্রেরি ও রিসোর্স থাকে।

Zygote যেসব টাস্ক পারফর্ম করে সেগুলি এখানে দেওয়া হল:

  1. Android OS ইনিশিয়ালাইজ করা হলে, init ডেমন Zygote প্রসেস স্পন করে। কিছু ডুয়াল আর্কিটেকচার সিস্টেমে, দুটি Zygote প্রসেস (একটি 64-বিট এবং 32-বিট) স্পন করা হয়। এই পৃষ্ঠায় শুধুমাত্র সিঙ্গেল আর্কিটেকচার সিস্টেমের ব্যাপারে আলোচনা করা হয়েছে।

  2. Zygote অবিলম্বে আনস্পেশালাইজড অ্যাপ প্রসেস (USAP) নামে প্রসেস স্পন করতে পারে অথবা অ্যাপ্লিকেশনগুলির প্রয়োজন অনুযায়ী প্রসেস স্পন করার জন্য অপেক্ষা করতে পারে। সিস্টেম প্রপার্টি বা Android ডিবাগ ব্রিজ কমান্ডের মাধ্যমে প্রথম বিকল্পটি চালু করতে হবে। প্রসেস অবিলম্বে স্পন করার জন্য Zygote কনফিগার করা সম্পর্কে আরও তথ্যের জন্য, আনস্পেশালাইজড অ্যাপ প্রসেস পুল চালু করুন লিঙ্কটি দেখুন।

    • আপনার ডিভাইসে USAP পুল চালু থাকলে:

      1. সিস্টেম সার্ভার, পুল থেকে উপলভ্য USAP-এর সাথে কানেক্ট করার জন্য Unix ডোমেন সকেট ব্যবহার করে। সিস্টেম সার্ভার অনুরোধ করে যে USAP প্রসেসের আইডি (PID), cgroup এবং অন্যান্য তথ্য পরিবর্তন করে অ্যাপ্লিকেশন ব্যবহারের জন্য আগে থেকে কনফিগার করা হয়েছে।
      2. USAP প্রি-কনফিগার করা হয়ে গেলে, এটি PID সহ সিস্টেম সার্ভারকে উত্তর দেয়।
      3. কোনও অ্যাপ্লিকেশন এই USAP-এর একটি দখল করলে, USAP আর পুলের অংশ থাকে না। পুলটিতে একটি বা তার কম USAP থাকলে, Zygote নতুন USAP দিয়ে পুলটি আবার পূর্ণ করে।
    • আপনার Zygote যদি লেজি ইভ্যালুয়েশন ব্যবহার করে প্রসেস স্পন করে:

      1. সিস্টেম সার্ভার একটি কমান্ড পায় যে অ্যাপের একটি প্রসেস প্রয়োজন।
      2. সিস্টেম সার্ভার উপযুক্ত Zygote-কে কমান্ড পাঠানোর জন্য একটি Unix ডোমেন সকেট ব্যবহার করে।
      3. Zygote প্রসেস ফর্ক করে এবং PID, cgroup ও অন্যান্য তথ্য পরিবর্তন করে।
      4. প্রসেস সম্পূর্ণ হলে, এটি PID-কে Zygote-এ ফেরত পাঠায়, যা তারপর এটিকে সিস্টেম সার্ভারে ফেরত পাঠায়।

USAP পুল চালু করা

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 সংক্রান্ত সমস্যার সমাধান রয়েছে।

Zygote ক্র্যাশ করছে

আপনার ডিভাইস সঠিকভাবে রিবুট না হলে এবং আপনার লগ বা ক্র্যাশ রিপোর্টে Zygote সংক্রান্ত সমস্যা দেখলে, এর কারণ হল আপনি সম্প্রতি এমন কোনও পরিবর্তন করেছেন যা initd বা সিস্টেম সার্ভার ক্র্যাশ করে। আপনার কোড ঠিক করলে সমস্যার সমাধান হয়ে যাবে।

SELinux ডিনায়াল বা IO সংক্রান্ত সমস্যা

Zygote প্রসেস সীমা জুড়ে ফাইল ডেসক্রিপ্টর হাইজিন সম্পর্কে বিশেষ যত্নশীল। ফর্ক করার সময় ফাইল ডেসক্রিপ্টর উপস্থিত থাকলেও শ্বেতলিস্টিং করা না থাকলে, আমরা dup সিস্টেম কল ব্যবহার করে /dev/null ক্যাশে করা ফাইল ডেসক্রিপ্টরকে অনিচ্ছাকৃতভাবে নতুন খোলা ফাইল অ্যাক্সেস করা থেকে আটকাই।

আপনি যদি ফ্রেমওয়ার্কে এমন পরিবর্তন করেন যার মধ্যে Zygote-এ রিসোর্স লোড করার চেষ্টা অন্তর্ভুক্ত থাকে এবং আপনি SELinux ডিনায়াল বা IO ব্যর্থতা পান:

  • নামহীন ফাইল ডেসক্রিপটরের জন্য, Restat কল করা হলে fds_to_ignore ভেক্টরে ফাইল ডেসক্রিপটর অন্তর্ভুক্ত করুন।

  • নাম দেওয়া ফাইল ডেসক্রিপটরের জন্য:

    1. WORKING_DIRECTORY/frameworks/base/core/jni/fd_utils.cpp এডিট করুন।
    2. খোলা ফাইলের জন্য অনুমোদিত তালিকায় পাথ যোগ করুন।