Init Process — Unixga o‘xshash operatsion tizimda kernel tomonidan ishga tushiriladigan birinchi user-space jarayon va odatda PID 1 egasi. U tizim xizmatlarini boshlash, ularning lifecycle’ini boshqarish, orphan processlarni qabul qilish va tizimni nazoratli o‘chirish kabi vazifalarni bajaradi. Linuxda systemd, SysV init, OpenRC yoki minimal container init shu rolni bajarishi mumkin.
Kernelga o‘tish
Kernel root filesystemni tayyorlagach belgilangan init executable’ni ochadi. U topilmasa yoki dynamic loader va kutubxonalar mavjud bo‘lmasa boot user space’ga o‘ta olmaydi. Emergency parametr orqali alternativ shell init sifatida ishga tushirilishi mumkin, biroq bunday muhitda odatiy mount va security policylar hali tayyor bo‘lmaydi.
PID 1 oddiy daemon emas. Kernel orphan bo‘lgan processlarni unga reparent qiladi. Init wait orqali tugagan child statusini yig‘masa zombie processlar to‘planadi.
Service ishga tushirish
Init konfiguratsiyadan service dependency, ordering va targetlarni quradi. Parallel startup bootni tezlashtiradi, lekin after va haqiqiy resource dependency farqlanadi. Network interface mavjudligi internet xizmatining tayyorligini anglatmaydi; readiness aniq signal yoki socket activation bilan ifodalanadi.
Socket activationda init listening socketni oldindan yaratadi va birinchi trafikda service’ni boshlaydi. File descriptor service’ga uzatiladi, shu bois restart paytida connection qabul qilish oynasi yo‘qolmaydi. Timer va path activation ham talab bo‘lganda ishga tushirishga xizmat qiladi.
Process nazorati
Service crash qilsa init restart policy, backoff va rate limit qo‘llaydi. Cheksiz tez restart log va CPUni to‘ldiradi. Exit code, signal va watchdog timeout turli sabab sifatida qayd etiladi. Dependency’ning to‘xtashi barcha dependent service’larni avtomatik o‘chirish yoki faqat warning berish policyga bog‘liq.
Init privilege drop, user/group, capability, namespace, cgroup va environmentni service ishga tushishidan oldin sozlashi mumkin. Bu sozlamalar daemonning o‘z kodiga tayanmasdan least privilege chegarasini yaratadi.
Signal va shutdown
PID 1 signallarni oddiy processdan biroz boshqacha qabul qiladi: explicit handler o‘rnatilmagan ayrim signallarning default ta’siri cheklanishi mumkin. Init signal handler yoki event loop orqali reload, reboot va shutdown so‘rovlarini boshqaradi.
Shutdownda yangi xizmatlar bloklanadi, processlarga tartibli stop yuboriladi, timeoutdan keyin majburiy tugatish qo‘llanadi, filesystemlar sync va unmount qilinadi. Storage uzilishidan oldin data service’lari dependency tartibida yopiladi.
Container ichida
Containerning PID namespace’i ichida birinchi process PID 1 semantikasini oladi. Ilovani bevosita PID 1 qilish signal forwarding va zombie reaping muammosini keltirishi mumkin. Kichik init wrapper child signalini uzatadi va wait bilan orphanlarni yig‘adi.
Host init container ichidagi PIDlarni boshqa raqamda ko‘radi. Monitoring namespace identifikatorini saqlamasa bir xil PIDlar chalg‘itadi. Container stop signali entrypoint shell’da yo‘qolmasligi uchun exec bilan haqiqiy processni almashtirish yoki to‘g‘ri forwarding kerak.
Holatni qayta yuklash
Init konfiguratsiyani reload qilganda mavjud processlar, yangi dependency graph va olib tashlangan unitlar o‘rtasidagi holatni uyg‘unlashtiradi. Reload har doim service restart degani emas. Manager o‘z binarysini re-exec qilib PID 1ni almashtirmasdan state va ochiq file descriptorlarni serializatsiya qilishi mumkin. Bu yo‘l xatolansa tizim xizmat boshqaruvchisiz qoladi, shu sabab upgrade rollback, emergency target va watchdog bilan tekshiriladi.
Bog‘liq tushunchalar
PID 1, service manager, daemon, process reaping, socket activation, shutdown