Bosh sahifa Wiki Signal

Signal

Signal — operatsion tizimning jarayonga asinxron hodisa yuz berganini bildiruvchi cheklangan xabar mexanizmidir. Unixga o‘xshash tizimlarda signal terminal interrupti, timer, child holati, noto‘g‘ri memory access yoki administrator buyrug‘ini yetkazadi. Signal oddiy function call emas: u jarayonning istalgan bajarilish nuqtasida handlerni ishga tushirishi mumkin.

Keng tarqalgan signallar

SIGTERM jarayondan tartibli tugashni so‘raydi va ushlanishi mumkin. SIGINT terminaldagi Ctrl+C bilan yuboriladi. SIGHUP tarixan terminal uzilishini, daemonlarda ko‘pincha configuration reloadni bildiradi. SIGCHLD child holati o‘zgarganda parentga keladi.

SIGKILL darhol kernel tomonidan tugatadi va handler bilan ushlanmaydi. SIGSTOP jarayonni to‘xtatadi, SIGCONT davom ettiradi. SIGSEGV yaroqsiz memory access, SIGFPE arifmetik exception, SIGPIPE yopilgan pipega yozish bilan bog‘liq. Aniq default action platformada belgilanadi.

Yetkazish va maska

Har thread signal maskga ega. Process-directed signal uni bloklamagan mos threadlardan biriga, thread-directed signal aniq threadga yetkaziladi. Signal bloklangan bo‘lsa pending qoladi. Oddiy standard signal bir necha marta kelib bitta pending bitga birlashishi mumkin; real-time signal queue va payloadni qo‘llaydi.

Signal raqamlariga portable tarzda suyanilmaydi, symbolic nom ishlatiladi. kill system call faqat tugatish emas, turli signal yuboradi. Permission process owner, capability va namespacega bog‘liq.

Handler xavfsizligi

Handler istalgan instructionni bo‘lib kirgani sabab odatiy kutubxona funksiyalarining ko‘pi async-signal-safe emas. malloc, logging locki yoki formatlash handlerda deadlock va corruption keltirishi mumkin. Handler minimal flag o‘rnatadi yoki self-pipe/eventfdga bayt yozib, asosiy event loopga ishni topshiradi.

Shared flag volatile sig_atomic_t kabi mos turda bo‘lishi kerak; zamonaviy til va threading memory modeliga alohida e’tibor beriladi. Handler oldingi errnoni saqlab qaytaradi. Nested signal va alternate signal stack stack overflow diagnostikasida kerak bo‘lishi mumkin.

Service boshqaruvi

Container orchestrator odatda avval SIGTERM yuborib grace period kutadi, keyin SIGKILL qiladi. PID 1 signal forwarding va child reap vazifasini to‘g‘ri bajarishi kerak. Shell wrapper exec qilmasa signal applicationga yetmasligi mumkin.

Graceful shutdown yangi requestni to‘xtatadi, in-flight ishni deadline bilan tugatadi va durable state ni commit qiladi. Handlerning o‘zida to‘liq shutdown bajarish o‘rniga cancellation context tarqatiladi. Ikkinchi signal tezkor chiqishni talab qilishi mumkin.

Diagnostika

Core dump fatal signal paytidagi memory va register holatini saqlashi mumkin. Maxfiy data bo‘lgani uchun permission va retention cheklanadi. Exit status ko‘pincha signal sababini kodlaydi. Tracing vositalari signal yuborgan PID va handlerni ko‘rsatadi.

Signal event ma’lumotini boy yetkazish uchun mos emas; socket, pipe yoki message queue ishlatiladi. U control notification uchun qulay, ammo delivery, ordering va handler chegaralari hujjatlashtiriladi.

Ishonchli ishlov berish

Signal handler odatda asinxron xavfsiz bo‘lmagan murakkab kutubxona funksiyalarini chaqirmasligi kerak. Keng tarqalgan usul handlerda faqat atomar bayroq o‘rnatish yoki maxsus kanalga bayt yozish, asosiy siklda esa haqiqiy tozalashni bajarishdir. Signal kelish tartibi va bir xil signalning birlashib ketishi platformaga bog‘liq bo‘lishi mumkin.

Konteynerda asosiy jarayon birinchi PID bo‘lib, signallarni bolalariga uzatishi va tugagan jarayonlarni yig‘ishi kerak. Aks holda graceful shutdown ishlamaydi yoki zombie jarayonlar qoladi.

Bog‘liq tushunchalar

POSIX signal, Process, Interrupt, Signal handler, Graceful shutdown, Core dump, IPC