الفرق بين المراجعتين ل"Ruby/Signal"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 4: سطر 4:
 
تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل.   
 
تسمح العديد من أنظمة التشغيل بإرسال إشارات إلى العمليات (processes) قيد التشغيل.   
  
لبعض الإشارات تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (trap) إشارة <code>USR1</code> واستخدامها في عملية التصحيح (debugging)، أو قد تستخدم الإشارة <code>TERM</code> لبدء إيقاف تشغيل مُراقب (controlled shutdown).  
+
لبعض الإشارات تأثير محدد على العملية، بينما تكون أخرى مرتبطة بالشيفرة البرمجية، وتتصرف بناء عليها. على سبيل المثال، قد تقوم العملية بإمساك (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
 
     $debug = !$debug
 
     $debug = !$debug
سطر 22: سطر 21:
 
Process.kill("USR1", pid)
 
Process.kill("USR1", pid)
 
# ...
 
# ...
Process.kill("TERM", pid)</syntaxhighlight>
+
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>أسماء الإشارة المتوفرة وتفسيراتها تعتمد على النظام المستخدم. كما الحال مع صياغات تسليم الإشارات ( Signal delivery semantics). لهذا فلا ينبغي التعويل على شكل محدد من تسليم الإشارات.
 
 
أسماء الإشارات المتوفرة وتفسيراتها تعتمد على النظام المستخدم. صياغات تسليم الإشارات (debugging) (<code>Signal</code>) قد تتعلق أيضًا بنوع النظام المستخدم. لهذا فلا ينبغي التعويل على شكل محدد من تسليم الإشارات.
 
 
 
 
==توابع الصنف العامة (Public Class Methods)==
 
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/Signal/list | التابع list]]===
+
===[[Ruby/Signal/list| التابع list]]===
 
بعبد  قائمة بأسماء الإشارة التي تم تعيينها إلى أرقام الإشارة الأصلية المقابلة.
 
بعبد  قائمة بأسماء الإشارة التي تم تعيينها إلى أرقام الإشارة الأصلية المقابلة.
===[[Ruby/Signal/signame | التابع signame]]===
+
===[[Ruby/Signal/signame| التابع signame]]===
يحول  رقم الككك إلى اسم ككك. ثم يعيد القيمة <code>nil</code> إن لم يكن الوسيط signo  رقم ككك صالح.
+
يحول  رقم الإشارة إلى اسم إشارة.
===[[Ruby/Signal/trap | التابع trap]]===
+
===[[Ruby/Signal/trap| التابع trap]]===
يحدد التابع trap معالج الإشارات (handling of signals). الوسيط الأول  يمثل اسم ككك (سسس مثل "SIGALRM" أو "SIGUSR1" وغير ذلك) أو رقم ككك. يمكن حذف الأحرف "SIG" من اسم الإشارة. تحدد التعليمة المعطاة (command) أو الكتلة الكود البرمجي المراد تشغيله عند إطلاق الإشارة. إذا كانت التعليمة تساوي السلسلة النصية "IGNORE" أو "SIG_IGN"، فسيتم تجاهل الإشارة. أما إذا كانت تساوي "DEFAULT" أو "SIG_DFL"، فسيُستدعى معالج روبي الافتراضي. لكن إذا كانت تساوي "EXIT" ، فستُنهي الإشارة البرنامج النصي. إذا كان التعليمة تساوي "SYSTEM_DEFAULT" ، فسيتم استدعاء معالج نظام التشغيل الافتراضي. خلا ذلك، سيتم تشغيل التعليمة أو الكتلة المعطاة. سيتم استدعاء اسم الإشارة الخاص "EXIT"، أو رقم الإشارة 0، قبل إنهاء البرنامج مباشرة. يعيد التابع trap المعالج السابق للإشارة المعينة.
+
يحدد التابع trap معالج الإشارات (handling of signals)
 +
 
 +
== مصادر ==
 
*[http://ruby-doc.org/core-2.5.1/Signal.html قسم  الصنف Signal في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/Signal.html قسم  الصنف Signal في توثيق روبي الرسمي.]

مراجعة 09:30، 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...

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

توابع الصنف العامة (Public Class Methods)

التابع list

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

التابع signame

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

التابع trap

يحدد التابع trap معالج الإشارات (handling of signals)

مصادر