Process Group — POSIXga o‘xshash tizimlarda bir nechta processni signal va terminal job control uchun bitta guruh sifatida boshqaradigan mantiqiy birlik.
PGID
Har process PIDdan tashqari process group ID (PGID)ga ega. Odatda pipeline’dagi barcha processlar bir guruhga qo‘yiladi, shunda shell Ctrl-C signalini butun foreground jobga yuboradi.
Session va terminal
Session bir yoki ko‘p process groupni birlashtiradi. Controlling terminal ayni paytda bitta foreground process groupni belgilaydi. Background group terminaldan o‘qishga urinsa SIGTTIN kabi signal olishi mumkin.
Shell race’i
Shell pipeline yaratishda fork qilingan childlarni race’siz bir PGIDga qo‘shishi kerak; parent va child ikkalasi setpgidni sinab ko‘rishi mumkin. Group leader identity va execdan oldingi timing muhim.
Signal
Signalni manfiy PID yoki maxsus API bilan groupga yuborish mumkin. Permission har member uchun tekshiriladi. Groupdagi processlar exit qilsa group tabiiy yo‘qoladi; PGID raqami keyin qayta ishlatilishi mumkin.
Chegaralar
Process group security boundary yoki resource isolation emas. Cgroup CPU/memory accounting, namespace visibilityni boshqaradi. Job control va cgroup maqsadlari boshqacha.
Job-control testi
Test multi-stage pipeline, foreground/background almashtirish, stop/continue, leader exit va terminal signallarini pseudo-terminal bilan tekshiradi.
Amaliy boshqaruv
Process Group implementatsiyasida PGID, session va terminal foreground 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 — pipeline processini noto‘g‘ri guruhlash. 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 pseudo-terminal job-control testi 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.
Shell foreground groupni terminalga berish jarayonida SIGTTOU va race’larni boshqaradi. Job to‘xtaganda shell terminal mode’larini saqlab, qayta foreground qilinganda tiklaydi. Orphaned process groupda stopped memberlar qolsa POSIX hangup/continue siyosati terminaldan uzilgan jobni boshqaradi.
Group ID session tashqarisidagi tasodifiy processga berilmaydi; session leader uchun setsid va group o‘zgartirish cheklovlari qo‘llanadi. Permission xatosi shell tomonidan job konteksti bilan ko‘rsatiladi.
Bog‘liq tushunchalar
POSIX, job control, session, signal, shell pipeline, process ID