حالة الخروج

في مجال الحوسبة ، تُعرف حالة الخروج (أو رمز الخروج أو قيمة الخروج ) لعملية منتهية بأنها عدد صحيح يُتاح للعملية الأصلية (أو المُستدعي). في نظام DOS ، يُشار إلى ذلك أحيانًا بمستوى الخطأ .

عند تنفيذ برامج الحاسوب، يُنشئ نظام التشغيل كيانًا مجردًا يُسمى عملية ، حيث تُحفظ فيه بيانات البرنامج. في أنظمة التشغيل متعددة المهام مثل يونكس ولينكس ، يمكن للعمليات النشطة إنشاء عمليات جديدة. تُسمى العملية التي تُنشئ عملية أخرى بالعملية الأصلية ، بينما تُسمى العمليات المُنشأة بالعمليات الفرعية . تعمل العمليات الفرعية بالتزامن مع العملية الأصلية. تُستخدم تقنية إنشاء العمليات الفرعية لتفويض بعض المهام إلى عملية فرعية عندما لا يكون هناك سبب لإيقاف تنفيذ العملية الأصلية. عند انتهاء العملية الفرعية من التنفيذ، تُنهي عملها باستدعاء دالة النظام exit . تُسهّل هذه الدالة تمرير رمز حالة الخروج إلى العملية الأصلية، التي يمكنها استرداد هذه القيمة باستخدام دالة النظام wait .

علم الدلالة

يمكن أن يكون لدى العملية الأب والعملية الابنة فهم مشترك لمعنى حالات الخروج. على سبيل المثال، من الممارسات البرمجية الشائعة أن تُعيد العملية الابنة القيمة صفر (تخرج بـ) إلى العملية الأب للدلالة على نجاح العملية. بالإضافة إلى هذه القيمة المُعادة من العملية الابنة، قد تتوفر معلومات أخرى للعملية الأب ، مثل كيفية خروج العملية، سواءً كان ذلك بشكل طبيعي أو عن طريق إشارة .

تُعدّ مجموعة الرموز المُعادة فريدةً للبرنامج الذي يُحددها، وعادةً ما تُشير إلى النجاح أو الفشل. قد تُشير قيمة الرمز المُعاد من الدالة أو البرنامج إلى سبب مُحدد للفشل. في العديد من الأنظمة، كلما ارتفعت القيمة، زادت خطورة سبب الخطأ. [ 1 ] بدلاً من ذلك، قد يُشير كل بت إلى حالة مُختلفة، حيث يتم تقييم هذه الحالات معًا بواسطة عامل "أو" للحصول على القيمة النهائية؛ على سبيل المثال، تقوم دالة fsck بذلك.

في بعض الأحيان، إذا تم تصميم التعليمات البرمجية مع وضع هذا الغرض في الاعتبار، فيمكن استخدامها مباشرة كمؤشر فرعي عند العودة إلى البرنامج المبدئي لتجنب الاختبارات الإضافية.

نظام التشغيل AmigaOS

في أنظمة التشغيل AmigaOS و MorphOS و AROS ، يتم تحديد أربعة مستويات:

  1. موافق 0
  2. تحذير ٥
  3. خطأ 10
  4. الفشل 20

Shell والبرامج النصية

تقوم البرامج النصية عادةً بتنفيذ الأوامر والتقاط حالات خروجها.

لأغراض الصدفة، يُعتبر الأمر ناجحًا إذا خرج بحالة خروج صفرية. أما حالة الخروج غير الصفرية فتشير إلى الفشل. يُستخدم هذا النظام الذي قد يبدو غير بديهي لتوفير طريقة واحدة محددة للإشارة إلى النجاح، وطرق متعددة للإشارة إلى حالات الفشل المختلفة. عند إنهاء أمر بإشارة قيمتها N N، تُعيّن الصدفة قيمة المتغير N $?إلى قيمة أكبر من 128. تستخدم معظم الصدفات القيمة N (128+N) ، بينما تستخدم ksh93 القيمة N (256+N) .

إذا لم يتم العثور على أمر، فيجب أن تُرجع الصدفة حالة 127. أما إذا تم العثور على أمر ولكنه غير قابل للتنفيذ، فيجب أن تكون حالة الإرجاع 126. [ 2 ] لاحظ أن هذا لا ينطبق على جميع الصدفات.

إذا فشل أمر ما بسبب خطأ أثناء التوسيع أو إعادة التوجيه، فإن حالة الخروج تكون أكبر من الصفر.

لغة C ولغة C++

تسمح لغتا البرمجة C و C++ للبرامج التي تخرج من الدالة الرئيسية أو تعود منها بالإشارة إلى نجاحها أو فشلها عن طريق إرجاع عدد صحيح، أو إرجاع وحدات الماكروEXIT_SUCCESS `exit` و `exit` EXIT_FAILURE. في أنظمة يونكس، تُساوي هذه القيم `exit` 0و `exit` 1على التوالي. [ 3 ] يمكن لبرنامج AC أيضًا استخدام exit()الدالة `exit` مع تحديد حالة العدد الصحيح أو وحدة الماكرو `exit` كمعامل أول، مما يؤدي إلى إيقاف البرنامج.

mainيتم تمرير القيمة المرجعة من إلى exitالدالة، والتي EXIT_SUCCESSقد EXIT_FAILUREتقوم بترجمتها إلى "شكل محدد للتنفيذ" للإنهاء الناجح أو الإنهاء غير الناجح .

باستثناء 0وحدات الماكرو EXIT_SUCCESSو EXIT_FAILURE، لا يُحدد معيار لغة C معنى رموز الإرجاع. وتختلف قواعد استخدام رموز الإرجاع باختلاف المنصات (انظر الأقسام الخاصة بكل منصة).

سي شارب

في لغة C# ، Main()لا تُرجع الدالة عادةً نوعًا (نوعها هو void، أو إذا كانت async، فهي System.Threading.Tasks.Task). ومع ذلك، Main()قد يشير إلى نوع إرجاع، من النوع int، والذي يُعاد إلى نظام التشغيل. إذا Main()تم تعريف الدالة على أنها async، فإنها تُرجع بدلاً من ذلك . [ 4 ]System.Threading.Tasks.Task<int>

دوس

في مصطلحات نظام التشغيل DOS، يُعرَّف مستوى الخطأ بأنه رمز خروج عددي صحيح يُرجعه برنامج تنفيذي أو روتين فرعي . تتراوح مستويات الخطأ عادةً من 0 إلى 255. [ 5 ] [ 6 ] [ 7 ] [ 8 ] في نظام DOS ، يتوفر 256 رمز خطأ فقط، لكن نظام DR DOS 6.0 والإصدارات الأحدث تدعم رموز خطأ 16 بت، على الأقل في ملف CONFIG.SYS . [ 7 ] مع نظامي 4DOS وDR-DOS COMMAND.COM ، يمكن ضبط رموز الخروج (في مهام الدفعات) باستخدام الأمر EXIT n [ 7 و(في ملف CONFIG.SYS ) باستخدام الأمر ERROR= n . [ 7 ]

غالبًا ما تُسجَّل حالات الخروج بواسطة برامج الدفعات باستخدام أوامر IF ERRORLEVEL . [ 5 ] [ 7 ] يدعم نظام DOS متعدد المستخدمين متغير بيئة محجوزًا %ERRORLVL% يتم تحديثه تلقائيًا عند عودة التطبيقات. يدعم ملف COMMAND.COM في نظام DR-DOS 7.02 والإصدارات الأحدث متغير بيئة زائفًا مشابهًا %ERRORLVL% بالإضافة إلى %ERRORLEVEL% . في ملف CONFIG.SYS ، يدعم نظام DR- DOS 6.0 والإصدارات الأحدث الأمر ONERROR لاختبار حالة التحميل ورمز الإرجاع لبرامج تشغيل الأجهزة ورمز خروج البرامج. [ 7 ] 

جافا

في لغة جافا ، main()لا يشير `request` إلى رمز الخروج، لذا عند الحاجة، يُحدد رمز الخروج يدويًا باستخدام ` java.lang.System::exit()request`، مما يُنهي البرنامج وآلة جافا الافتراضية. يمكن لأي دالة استدعاء `request` System.exit()، ما لم يمنع مدير الأمان ذلك. يعمل الوسيط `request` كرمز حالة؛ وبحسب الاصطلاح، يشير رمز الحالة غير الصفري إلى إنهاء غير طبيعي. [ 9 ]

أوبن في إم إس

في نظام التشغيل OpenVMS ، يُشار إلى النجاح بقيم فردية، وإلى الفشل بقيم زوجية. القيمة عبارة عن عدد صحيح من 32 بت، يتضمن الحقول الفرعية التالية: بتات التحكم، ورقم المنشأة، ورقم الرسالة، ومستوى الخطورة. تُقسم قيم الخطورة بين النجاح (نجاح، معلوماتي) والفشل (تحذير، خطأ، كارثي). [ 10 ]

الخطة 9

في لغة C الخاصة بـ Plan 9، يتم الإشارة إلى حالة الخروج بواسطة سلسلة نصية يتم تمريرها إلى الدالة exits() ، والدالة main() من النوع void .

بوسيكس

في أنظمة يونكس وغيرها من الأنظمة المتوافقة مع معيار POSIX ، يمكن للعملية الرئيسية استرداد حالة خروج العملية الفرعية باستخدام wait()مجموعة استدعاءات النظام المحددة في ملف رأس POSIX<wait.h> . [ 11 ] من بين هذه الاستدعاءات، يسترد الاستدعاء waitid()[ 12 ] حالة الخروج كاملة، بينما يسترد الاستدعاءان الأقدم wait()[ waitpid()13 ] أقل 8 بتات أهمية من حالة الخروج فقط.

تُحدد الواجهات قيمة حالة من النوع المُعبأ كحقل بتات يحتوي على أنواع مختلفة من معلومات إنهاء العمليات الفرعية. إذا انتهت العملية الفرعية بالخروج (كما هو مُحدد بواسطة الماكرو؛ والبديل المعتاد هو أنها توقفت بسبب إشارة غير مُعالجة )، wait()فإن SUS يُحدد أنه يُمكن استرداد البتات الثمانية الأقل أهمية من حالة الخروج من قيمة الحالة باستخدام الماكرو .waitpid()intWIFEXITED()WEXITSTATUS()

في waitid()استدعاء النظام (المضاف مع SUSv1)، لم تعد حالة خروج الطفل والمعلومات الأخرى موجودة في حقل بت ولكن في بنية من النوع siginfo_t. [ 14 ]

تستخدم الأنظمة المتوافقة مع معيار POSIX عادةً اصطلاحًا يُشير إلى النجاح بالصفر، وإلى الخطأ بقيمة غير صفرية. [ 15 ] وقد وُضعت بعض الاصطلاحات لتحديد المعاني النسبية لرموز الأخطاء المختلفة؛ فعلى سبيل المثال، توصي GNU بتخصيص الرموز التي يكون فيها البت الأعلى مُفعّلاً للأخطاء الجسيمة. [ 3 ]

حددت أنظمة التشغيل المشتقة من BSD مجموعة واسعة من التفسيرات المفضلة: معاني 15 رمز حالة من 64 إلى 78 مُعرّفة في رأس POSIX <sysexits.h>. [ 16 ] تاريخيًا، استُمدت هذه الرموز من برنامج sendmail وغيره من برامج نقل الرسائل ، ولكنها استُخدمت لاحقًا في العديد من البرامج الأخرى. [ 17 ] وقد تم إيقاف استخدامها، ويُنصح بتجنبها. [ 16 ]

يحتوي دليل البرمجة النصية المتقدمة بلغة باش على بعض المعلومات حول معنى رموز حالة الخروج غير الصفرية. [ 18 ]

الصدأ

في لغة Rust ، main()يمكن أن تُرجع أي نوع يُنفذ السمة std::process::Termination. [ 19 ]

داخليًا في بيئة تشغيل Rust، ستعود هذه القيم libc::EXIT_SUCCESSعند التنفيذ الناجح libc::EXIT_FAILUREوعند الفشل.

في مكتبة Rust القياسية، تحتوي الأنواع التالية على تطبيقات لـ std::process::Termination:

نظام إدارة المحتوى VM

رمز الإرجاعمعنى
0إتمام ناجح
1تحذير بسيط أو حالة إعلامية
2تم التحذير، ولكن تم تنفيذ الأمر
4خطأ بسيط، تم إكمال الأمر مع وجود مشاكل
8حدث خطأ
12خطأ جسيم
16خطأ جسيم / فشل الأمر
20+أخطاء جسيمة خاصة بالأوامر

[ 20 ]

ويندوز

يستخدم نظام التشغيل مايكروسوفت ويندوز أعدادًا صحيحة غير موقعة من 32 بت كرموز خروج، [ 21 ] [ 22 ] على الرغم من أن مترجم الأوامر يتعامل معها على أنها أعداد موقعة. [ 23 ]

تُشار إلى رموز الخروج مباشرةً، على سبيل المثال، بواسطة مُفسِّر سطر الأوامر CMD.exe بالمصطلحات errorlevelالموروثة من نظام DOS . وتشير إليها عمليات إطار عمل .NET و Windows PowerShellExitCode كخاصية للكائن Process.

انظر أيضاً

مراجع

  1. ^ "مستويات الخطأ" . صفحات البرمجة النصية لـ Rob van der Woude . تم الاسترجاع 2007-08-26 .
  2. "لغة أوامر الصدفة - حالة الخروج للأوامر" . مجموعة أوبن . تم الاسترجاع في 7 يوليو 2015 .
  3. 1 2 "دليل مرجع مكتبة GNU C 25.6.2: حالة الخروج" . Gnu.org . تم الاسترجاع في 2012-07-09 .
  4. مايكروسوفت ليرن (2026-03-20). "الدالة الرئيسية () ووسائط سطر الأوامر" . learn.microsoft.com . مايكروسوفت ليرن.
  5. 1 2 بول ماتياس ر. (1997/05/01) [1993/10/01]. BATTIPs - نصائح وحيل zur Programmierung von Batchjobs (باللغة الألمانية). 7: مستوى الخطأ. مؤرشف من الأصل بتاريخ 23-08-2017 . تم الاسترجاع 2017/08/23 . {{cite book}}تم |work=تجاهله ( مساعدة )تم أرشفة الرابط القديم بتاريخ 11-09-2017 على archive.today (ملاحظة: ملف BATTIPS.TXT جزء من ملف MPDOSTIP.ZIP. يشير الرابط المرفق إلى نسخة قديمة من ملف BATTIPS.TXT تم تحويلها إلى HTML.)
  6. أوير، إريك؛ بول، ماتياس ر.؛ هول، جيم (24-12-2015) [31-12-2003]. "مستويات أخطاء نظام التشغيل MS-DOS" . مؤرشف من الأصل بتاريخ 24-12-2015.
  7. 1 2 3 4 5 6 بول ماتياس ر. (1997/07/30) [1994/05/01]. NWDOS-TIPs — نصائح وحيل لتشغيل Novell DOS 7، مع النقر على تفاصيل التفاصيل والأخطاء والحلول البديلة . الإصدار 157 (باللغة الألمانية) (3 ed.). مؤرشفة من الأصلي بتاريخ 2016-11-04 . تم الاسترجاع 2014/08/06 .  {{cite book}}تم تجاهل هذا |work=( مساعدة ) (ملاحظة: NWDOSTIP.TXT هو عمل شامل حول Novell DOS 7 و OpenDOS 7.01 ، ويتضمن وصفًا للعديد من الميزات والتفاصيل الداخلية غير الموثقة. يشير الرابط المرفق إلى نسخة مُحوّلة إلى HTML من الملف، وهي جزء من المجموعة .)MPDOSTIP.ZIP
  8. ألين، ويليام؛ ألين، ليندا. "مستويات أخطاء ويندوز 95/98/ME" . مؤرشف من الأصل بتاريخ 2011-07-07.
  9. "واجهة برمجة تطبيقات جافا 1.6.0" . صن مايكروسيستمز . تم الاطلاع عليه بتاريخ 2008-05-06 .
  10. "تنسيق OpenVMS لقيم حالة الإرجاع" . H71000.www7.hp.com. مؤرشف من الأصل بتاريخ 19-03-2012 . تم الاطلاع عليه بتاريخ 09-07-2012 .
  11. مرجع تعريفات القواعد، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Groupsys_wait.h  
  12. مرجع واجهات النظام، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Groupwaitid  
  13. مرجع واجهات النظام، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Groupwait  
  14. "2.4.3 إجراءات الإشارة" . مجموعة أوبن . تم الاسترجاع في 2019-02-08 .
  15. "الفصل 6. الخروج وحالة الخروج" . Faqs.org . تم الاطلاع عليه بتاريخ 2012-07-09 .
  16. 1 2 : رموز الخروج المفضلة للبرامج - دليل وظائف مكتبة FreeBSDsysexits(3)   
  17. يُظهر بحث جوجل عن «"sysexits.h" site:github.com» «حوالي 3540 نتيجة»؛ تم استرجاعه في 21-02-2013.
  18. "رموز الخروج ذات المعاني الخاصة" .
  19. فريق Rust (25-05-2026). "إنهاء في std::process" . doc.rust-lang.org . فريق Rust.
  20. "رموز الإرجاع" . www.ibm.com . تم الاطلاع عليه بتاريخ 27-03-2026 .
  21. "دالة الخروج من العملية" . تم الاطلاع عليها بتاريخ 16-12-2016 .
  22. "دالة GetExitCodeProcess" . تم الاطلاع عليها بتاريخ 22-04-2022 .
  23. "هل من الممكن أن تكون رموز الخروج أكبر من 255؟" . تم الاطلاع عليه بتاريخ 28-09-2009 .