الفرق بين المراجعتين لصفحة: «Ruby/Signal»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Signal</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Signal تسمح العديد م...' |
لا ملخص تعديل |
||
سطر 2: | سطر 2: | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Signal]] | [[تصنيف: Ruby Signal]] | ||
تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل. لبعض الإشارات تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (trap) إشارة USR1 واستخدامها في عملية التصحيح (debugging)، | تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل. | ||
لبعض الإشارات تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (trap) إشارة <code>USR1</code> واستخدامها في عملية التصحيح (debugging)، أو قد تستخدم الإشارة <code>TERM</code> لبدء إيقاف تشغيل مُراقب (controlled shutdown). | |||
<syntaxhighlight lang="ruby">pid = fork do | <syntaxhighlight lang="ruby">pid = fork do | ||
Signal.trap("USR1") do | Signal.trap("USR1") do | ||
سطر 20: | سطر 22: | ||
Process.kill("USR1", pid) | Process.kill("USR1", pid) | ||
# ... | # ... | ||
Process.kill("TERM", pid) | Process.kill("TERM", pid)</syntaxhighlight> | ||
<syntaxhighlight lang="ruby"> Debug now: true | <syntaxhighlight lang="ruby"> Debug now: true | ||
Debug now: false | Debug now: false | ||
Terminating...</syntaxhighlight> | Terminating...</syntaxhighlight> | ||
أسماء الإشارات المتوفرة وتفسيراتها تعتمد على النظام المستخدم. صياغات تسليم الإشارات (debugging) (<code>Signal</code>) قد تتعلق أيضًا بنوع النظام المستخدم. لهذا فلا ينبغي التعويل على شكل محدد من تسليم الإشارات. | |||
==توابع الصنف العامة (Public Class Methods)== | ==توابع الصنف العامة (Public Class Methods)== |
مراجعة 09:27، 2 نوفمبر 2018
تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل.
لبعض الإشارات تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (trap) إشارة USR1
واستخدامها في عملية التصحيح (debugging)، أو قد تستخدم الإشارة TERM
لبدء إيقاف تشغيل مُراقب (controlled shutdown).
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 المعالج السابق للإشارة المعينة.