صفحة الصنف Signal
في روبي
تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (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...
أسماء الإشارات المتوفرة وتفسيراتها تعتمد على النظام المستخدم. صياغات تسليم الإشارات (debugging) (Signal
) قد تتعلق أيضًا بنوع النظام المستخدم. لهذا فلا ينبغي التعويل على شكل محدد من تسليم الإشارات.
توابع الصنف العامة (Public Class Methods)
التابع list
بعبد قائمة بأسماء الإشارة التي تم تعيينها إلى أرقام الإشارة الأصلية المقابلة.
التابع signame
يحول رقم الككك إلى اسم ككك. ثم يعيد القيمة nil
إن لم يكن الوسيط signo رقم ككك صالح.
التابع trap
يحدد التابع trap معالج الإشارات (handling of signals). الوسيط الأول يمثل اسم ككك (سسس مثل "SIGALRM" أو "SIGUSR1" وغير ذلك) أو رقم ككك. يمكن حذف الأحرف "SIG" من اسم الإشارة. تحدد التعليمة المعطاة (command) أو الكتلة الكود البرمجي المراد تشغيله عند إطلاق الإشارة. إذا كانت التعليمة تساوي السلسلة النصية "IGNORE" أو "SIG_IGN"، فسيتم تجاهل الإشارة. أما إذا كانت تساوي "DEFAULT" أو "SIG_DFL"، فسيُستدعى معالج روبي الافتراضي. لكن إذا كانت تساوي "EXIT" ، فستُنهي الإشارة البرنامج النصي. إذا كان التعليمة تساوي "SYSTEM_DEFAULT" ، فسيتم استدعاء معالج نظام التشغيل الافتراضي. خلا ذلك، سيتم تشغيل التعليمة أو الكتلة المعطاة. سيتم استدعاء اسم الإشارة الخاص "EXIT"، أو رقم الإشارة 0، قبل إنهاء البرنامج مباشرة. يعيد التابع trap المعالج السابق للإشارة المعينة.