Process Tree — processlar orasidagi parent–child yaratilish aloqalarini ildizli daraxt sifatida ko‘rsatadigan model. Har yangi process odatda uni yaratgan parentga bog‘lanadi.
Yaratilish aloqasi
Fork childga yangi PID va parent PID beradi. Child resurslarni nusxa yoki reference orqali meros qiladi. Exec daraxtdagi parent-child aloqani o‘zgartirmasdan process image’ini almashtiradi.
Wait va reparenting
Parent child tugashini wait orqali yig‘adi. Parent oldin exit qilsa orphan child tizimdagi maxsus reaper yoki subreaperga reparent qilinadi. Container init zombie’larni yig‘ishi kerak.
Monitoring
Tree monitoring xizmat qaysi workerlarni yaratganini ko‘rsatadi, ammo daemon double-fork, reparenting yoki PID namespace sabab ko‘rinish o‘zgaradi. Process ancestry security qarori uchun yolg‘iz ishonchli identity emas.
Lifecycle boshqaruvi
Signalni faqat tree bo‘yicha recursive yuborish race yaratadi: scan paytida yangi child tug‘ilishi mumkin. Process group, cgroup yoki job object lifecycle boshqaruvi uchun kuchliroq primitive beradi.
Namespace
PID namespace ichida process boshqa PID va parent ko‘rishi mumkin. Host tree containerlararo to‘liq ko‘rinishga ega. /proc snapshot o‘qilayotganda process exit qilishi tabiiy.
Tree testi
Test fork/exec, orphan, zombie, subreaper va namespace holatlarini qamraydi. Tree node identity PID bilan birga start time yoki handle orqali reuse’dan himoyalanadi.
Amaliy boshqaruv
Process Tree implementatsiyasida parent, child va reaper aloqasi alohida va versiyalangan holat sifatida yuritiladi. Qaror uchun zarur inputlar yashirin global taxminga aylantirilmaydi: platforma, konfiguratsiya, identity yoki memory-order sharti tegishli obyekt bilan bog‘lanadi. Shu sabab incremental yangilanish, context almashishi yoki parallel hodisada eskirgan ma’lumotdan foydalanish kamayadi. Debug rejim qarorni hosil qilgan edge, state transition va parametrlarni ko‘rsatadi; production log esa maxfiy qiymatlarni xom shaklda yozmaydi.
Muhim xato sinfi — PID reuse yoki orphan lifecycle xatosi. Bunday vaziyatda tizim optimistik tarzda davom etmaydi: semantikaga qarab konservativ fallback, bounded retry, taskni bloklash yoki aniq error tanlanadi. Timeout correctness isboti emas; u faqat operatsion limitdir. Queue membership, reference count, lock ownership va visibility kabi invariantlar state bilan atomik yangilanadi. Cancellation yoki failure o‘rtada yuz bersa qisman o‘zgargan holat cleanup protokoli orqali tiklanadi.
Sifat nazorati fork/exec/reparent testlari orqali bajariladi. Test normal yo‘ldan tashqari bo‘sh navbat, bitta element, yuqori contention, timeout bilan bir vaqtdagi wakeup, resurs limiti va platforma variantlarini qamraydi. To‘g‘rilik performance’dan alohida tekshiriladi; keyin throughput, p99 latency, context switch, cache miss yoki artefakt hajmi kabi mavzuga mos ko‘rsatkichlar baseline bilan solishtiriladi. Topilgan minimal interleaving yoki kirish regressiya to‘plamida doimiy saqlanadi.
Process tree vizualizatori parent PIDni o‘qish bilan start time’ni ham tekshiradi, chunki PID tez qayta ishlatilishi mumkin. Snapshot davomida yangi child paydo bo‘lsa izchillik darajasi ko‘rsatiladi. Lifecycle action uchun daraxt scanidan ko‘ra kernel job/cgroup handle’i ishonchliroq.
Tree’da kernel thread, container init va subreaper alohida belgilansa operator parent aloqasini noto‘g‘ri talqin qilmaydi. Vizualizatsiya cycle bo‘lmasligi invariantini tekshiradi.
Bog‘liq tushunchalar
parent process, child process, fork, PID namespace, zombie process, process group