سؤال

إذا كانت الإجابة بنعم، على أي نظام تشغيل، شل أو أيا كان؟

خذ بعين الاعتبار برنامج جافا التالي (أنا أستخدم جافا كمثال فقط، أي لغة ستكون مناسبة لهذا السؤال، الذي يتعلق أكثر بأنظمة التشغيل):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

عند تشغيله على Linux وbash، فإنه يُرجع دائمًا قيمًا أقل تساوي 255، على سبيل المثال.(echo $? يطبع رمز الخروج للأمر الذي تم تنفيذه سابقًا)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

تم التعديل:الإجابة (الوحيدة، حتى الآن) أدناه تشرح بشكل كامل ما يحدث على أنظمة UNIXes.ما زلت أتساءل عن أنظمة تشغيل أخرى.

هل كانت مفيدة؟

المحلول

غير ممكن على يونكس ومشتقاته.تتكون معلومات حالة الخروج التي يتم إرجاعها من حقلين مكونين من 8 بتات، أحدهما يحتوي على حالة الخروج، والآخر يحتوي على معلومات حول سبب الوفاة (0 يشير ضمنًا إلى خروج منظم تحت سيطرة البرنامج، والقيم الأخرى تشير إلى أن الإشارة قتلتها، وتشير إلى ما إذا كان تم إلقاء جوهر).

نصائح أخرى

في نظام التشغيل Windows الحديث، نظام التشغيل نفسه وقشرة وحدة التحكم الافتراضية (CMD.EXE)، قبول وعرض رموز الخروج عبر النطاق الكامل للأعداد الصحيحة الموقعة 32 بت على الأقل.تشغيل المثال الخاص بك أعلاه في CMD.EXE يعطي رموز الخروج التي طلبتها:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

لا يمتلك Windows حقًا مفهوم إشارات Unix، ولا يحاول اختطاف رمز الخروج لإضافة معلومات إضافية، طالما أن برنامج Shell الخاص بك (أو أي برنامج ينتهي به الأمر إلى قراءة رمز الخروج) لا يفعل ذلك أيضًا، يجب عليك استعادة رموز الخروج التي قمت بإعادتها.لحسن الحظ، فإن البرامج التي تستخدم وقت تشغيل Microsoft C (بما في ذلك كافة البرامج المترجمة باستخدام MS Visual C++) تحافظ على رمز الخروج كما هو من عمليات الخروج.

يحتوي Windows على العديد من رموز الخروج، أكثر من 14000.(أنا متأكد من أنك غالبًا ما رأيت بعضها على شاشتك).

هنا يأتي:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top