الدرس 8: الإشارات — التواصل بين العمليات
الإشارات هي آلية خفيفة الوزن في نظام التشغيل لإرسال أحداث غير متزامنة إلى عملية. في هذا الدرس ندرس دورة حياة الإشارة — الإرسال والاستقبال والمعالجة — ونفهم لماذا يشكّل SIGKILL خطرًا على العمليات التي تحتفظ بموارد GPU.
الإشارة هي بمثابة نقرة على كتف العملية: يقول SIGTERM 'من فضلك أغلق نفسك'، ويقول SIGKILL 'مُت الآن' — وفي الحالة الأخيرة لا يوجد وقت للتنظيف.
- إشارة
- إشعار قصير غير متزامن يُرسَل إلى عملية من النواة أو من عملية أخرى للإشارة إلى حدث (خطأ، أو طلب إنهاء، أو مقاطعة من المستخدم).
- SIGTERM
- الإشارة 15 — طلب إنهاء مهذّب يمكن التقاطه ومعالجته، ما يتيح للعملية تحرير مواردها قبل الخروج.
- SIGKILL
- الإشارة 9 — إنهاء قسري لا يمكن التقاطه أو حجبه أو تجاهله؛ تُنهي النواة العملية فورًا دون أي تنظيف.
- معالِج الإشارات
- دالة تُسجَّل باستخدام signal() أو sigaction() وتُستدعى بشكل غير متزامن عند وصول إشارة. لا يُسمح بداخلها إلا بالعمليات الآمنة للإشارات غير المتزامنة (async-signal-safe).
- sigaction
- واجهة POSIX الكاملة لتسجيل معالِجات الإشارات، وتوفّر تحكمًا في قناع الإشارات وأعلامًا إضافية تتجاوز استدعاء signal() البسيط.