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

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

المراجعة الحالية بتاريخ 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

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

مصادر