التابع exec‎ الخاص بالصنف Kernel في روبي

من موسوعة حسوب
< Ruby‏ | Kernel
مراجعة 19:10، 21 أكتوبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>exec‎</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

يستبدل التابع العملية الحالية عن طريق تشغيل الأمر الخارجي المعطى، والذي يمكن أن يأخذ أحد الأشكال التالية: exec(commandline) سطر أوامر نصي shell exec(cmdname, arg1, ...) والذي يُمرّر إلى الصدفة (shell) القياسية، اسم أمر ووسيط واحد أو أكثر (بدون صدفة) اسم أمر و exec([cmdname, argv0], arg1, ...) و argv أو وسائط أكثر (بدون shell) في الشكل الأول ، تؤخذ السلسلة النصية باعتبارها سطر أوامر والذي تثوم الصدفة بتسبطُيه (expansion ) قبل أن يتم تنفيذه. الصدفة القياسية تعني دائمًا "/bin/sh" على الأنظمة المشابهة ليونكس، مثل ENV["RUBYSHELL"] (أو ENV["COMSPEC"] على منصات Windows NT ) ، وما شابه. إذا اتبعت السلسلة النصية من الشكل الأول (exec("command")) هذه القواعد البسيطة: لا أحرف مميزة (meta characters)، ولا كلمات مخصصة للصدفة أو مدمجة (built-in) ستستدعي روبي الأمر مباشرة دون صدفة يمكنك إلزام استدعاء الصدفة بإضافة "؛" إلى السلسلة النصية (لأن "؛" حرف مميز). لاحظ أن هذا السلوك يمكن ملاحظته في كون معرف العملية pid الذي تم الحصول عليه (القيمة المعادة من spawn () و IO#pid لـ IO.popen) هو معرف العملية pid للأمر المستدعى، وليس الصدفة . في الشكل الثاني (exec("command1", "arg1", ...)) ، يتم اعتبار الأول كاسم للأمر، أما البقية فتُمرّر كوسائط للأمر دون أن تبسطها الصدفة. في الشكل الثالث (exec(["command", "argv0"], "arg1", ...)) ، يُبدأ بمصفوفة ثنائية في بداية الأمر، العنصر الأول هو الأمر الذي سيتم تنفيذه، أما الثاني فيُستخدم باعتباره قيمة argv[0]، والتي قد تظهر في قوائم العملية (process listings). من أجل تنفيذ الأمر، ستُستخدم إحدى استدعاءات النظام exec(2)، لذلك فإنّ الأمر الجاري قد يرث بعض خصائص بيئة البرنامج الأصلي (بما في ذلك واصفات الملفات المفتوحة). يمكن تعديل هذا السلوك عبر الوسيطين env و options. انظر ::spawn لمزيد من التفاصيل. في حال فشل تنفيذ الأمر (عادةً عند عدم التمكن من إيجاد Errno::ENOENT) يتم إطلاق استثناء SystemCallError. بعدل التابع خصائص العملية وفقا لقيمة الوسيط options قبل استدعاء النظام exec(2). راجع ::spawn لمزيد من التفاصيل حول options المعطى. قد يُحتفظ بالخصائص المعدلة عند فشل استدعاء النظام exec(2). على سبيل المثال، حدود الموارد الثابتة (hard resource limits) غير قابلة للاستعادة. إذا لم يناسلبك هذا، فضع في اعتبارك إنشاء عملية فرعية (child process) باستخدام :: spawn أو #system.

البنية العامة

exec([env,] command... [,options])

المعاملات

env‎

command...‎

options‎

القيمة المُعادة

أمثلة

مثال على استخدام التابع exec‎:

exec "echo *"       # echoes list of files in current directory
# never get here
exec "echo", "*"    # echoes an asterisk
# never get here

انظر أيضا

  • التابع eval: يقيم (Evaluates) التابع تعبيرات روبي الموجودة في سلاسل نصية. إذا أعطي الوسيط binding، والذي يجب أن يكون من النوع Binding، فسيُجرى التقييم في السياق الخاص بها. في حال تمرير الوسيطين الاختياريين filename و lineno، فسيُستخدمان عند الإبلاغ عن أخطاء في الصياغة.
  • التابع exit: يبدأ التابع عملية إنهاء البرنامج النصي لروبي، عن طريق إطلاق استثناء SystemExit. من الممكن أن يتم احتواء هذا الاستثناء. يُستخدم الوسيط الاختياري لإعادة رمز الحالة (status code) لبيئة الاستدعاء. تشير الحالتان true و FALSE إلى النجاح والفشل على التوالي. يعتمد تفسير قيم الأعداد الأخرى على النظام المُستخدم.

مصادر