2008-10-07 10 views
29

यदि हां, तो किस ऑपरेटिंग सिस्टम, खोल या जो भी हो?255 से अधिक ExitCodes संभव है?

निम्नलिखित जावा कार्यक्रम पर विचार करें (मैं जावा का उपयोग कर रहा सिर्फ एक उदाहरण के रूप में, किसी भी भाषा इस सवाल के बारे में अधिक आपरेशन प्रणाली है जिसके लिए अच्छा होगा):

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

लिनक्स और पार्टी पर यह चल रहा है , यह हमेशा 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 पर क्या होता है। मैं अभी भी अन्य ओएस के बारे में सोच रहा हूँ।

+2

[यह डुप्लिकेट प्रश्न] (http://stackoverflow.com/q/5149228/824425) में [एक बेहतर (लेकिन स्वीकार नहीं किया गया) उत्तर है [http://stackoverflow.com/a/5149399/824425) । –

उत्तर

30

यूनिक्स और डेरिवेटिव पर संभव नहीं है। बाहर निकलने वाली निकास स्थिति की जानकारी में दो 8-बिट फ़ील्ड होते हैं, जिनमें से बाहर निकलने की स्थिति होती है, और अन्य मौत के कारण (0 प्रोग्राम नियंत्रण के तहत व्यवस्थित निकास का अर्थ है, अन्य संकेतों से संकेत मिलता है कि सिग्नल ने इसे मार दिया है, और यह दर्शाता है कि क्या एक कोर डंप किया गया था)।

0

विंडोज़ में 14,000 से अधिक निकास कोड हैं। (मुझे यकीन है कि आप अक्सर उनमें से कुछ को अपनी स्क्रीन पर देखते हैं)।

यहाँ आता है:

+8

आप मानक विंडोज एपीआई द्वारा दिए गए त्रुटि कोड के बारे में बात कर रहे हैं। ओपी जानना चाहता है कि वह अपने स्वयं के कार्यक्रम के लिए क्या त्रुटि कोड वापस कर सकता है। –

+1

नहीं, विंडोज़ 32-बिट निकास कोड => 4 बिलियन से अधिक का समर्थन करता है –

13

आधुनिक विंडोज़ पर, ओएस ही है, और डिफ़ॉल्ट सांत्वना खोल (CMD.EXE), स्वीकार करते हैं और कम से कम 32-बिट पर हस्ताक्षर किए पूर्णांकों की पूरी श्रृंखला के दौरान बाहर निकलने के कोड को दिखाते हैं। अतिरिक्त जानकारी जोड़ने के

> 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 

विंडोज वास्तव में यूनिक्स संकेतों की अवधारणा नहीं है, और न ही यह बाहर निकलने के कोड का अपहरण करने की कोशिश करता है, इसलिए जब तक: बाहर निकलने के कोड आप के लिए कहा CMD.EXE में ऊपर अपने उदाहरण चल देता है आपके खोल के रूप में (या जो भी प्रोग्राम बाहर निकलने के कोड को पढ़ता है) वह नहीं करता है, आपको वापस आने वाले निकास कोड वापस लेना चाहिए। सौभाग्य से, प्रोग्राम जो माइक्रोसॉफ्ट के सी रनटाइम (एमएस विजुअल सी ++ के साथ संकलित सभी प्रोग्रामों सहित) का उपयोग करते हैं, एक्जिट कोड को बाहर निकलने के तरीके से बाहर करते हैं।

संबंधित मुद्दे