الصنف Signal في روبي

من موسوعة حسوب
< Ruby
مراجعة 08:56، 4 ديسمبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل للتحكم بها.

بعض الإشارات لها تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (trap) الإشارة USR1 واستخدامها في عملية التنقيح (debugging)، أو قد تُستخدَم الإشارة TERM لبدء إيقاف تشغيل العملية بشكل مُراقَب.

pid = fork do
  Signal.trap("USR1") do
    $debug = !$debug
    puts "Debug now: #$debug"
  end
  Signal.trap("TERM") do
    puts "Terminating..."
    shutdown()
  end
  # . . . do some work . . .
end
Process.detach(pid)
# Controlling program:
Process.kill("USR1", pid)
# ...
Process.kill("USR1", pid)
# ...
Process.kill("TERM", pid)

ناتج تنفيذ هذه الشيفرة هو:

 Debug now: true
 Debug now: false
Terminating...‎

أسماء الإشارة المتوفرة وتفسيراتها تعتمد على النظام المستخدم. كما هو الحال مع صياغات توصيل الإشارات (Signal delivery semantics). لهذا، لا ينبغي التعويل على شكل محدد من أشكال توصيل الإشارات.

توابع الصنف العامة

list

يعيد قائمة بأسماء الإشارة المعيَّنة لأرقام الإشارة الأصلية المقابلة لها.

signame

يحول رقم الإشارة إلى الاسم المقابل لها.

trap

يربط معالجًا بإشارة محدَّدة. 

مصادر