सिस्टम में अंतर। निकास (0), System.exit (-1), System.exit (1) जावा में


280

मैं जावा में निम्नलिखित के बीच अंतर जानना चाहता हूं

System.exit(0);
System.exit(-1);
System.exit(1);

मुझे उपर्युक्त कोड का उचित उपयोग कब करना है?


17
आपने उत्तर को 'सर्वश्रेष्ठ उत्तर' के रूप में चिह्नित क्यों नहीं किया है इसलिए एक हरी टिक है? यह अन्य लोगों को यह जानने में मदद करता है कि सबसे अच्छा क्या है !!
सकाम गोयल

जवाबों:


252

यदि प्रोग्राम का निष्पादन अच्छा या बुरा हो गया है, तो निकास के पैरामीटर को योग्य होना चाहिए। यह पुरानी प्रोग्रामिंग भाषाओं से आनुवंशिकता का एक प्रकार है जहां यह जानना उपयोगी है कि क्या कुछ गलत हुआ और क्या गलत हुआ।

एग्जिट कोड है

  • 0 जब निष्पादन ठीक हो गया;
  • 1, -1, whatever != 0जब कुछ त्रुटि हुई है, आप विभिन्न मूल्यों त्रुटियों के विभिन्न प्रकार के लिए उपयोग कर सकते हैं।

यदि मैं सही एक्ज़िट कोड हूँ, जिसका इस्तेमाल सिर्फ पॉज़िटिव नंबर हुआ करता है (मेरा मतलब UNIX में है) और रेंज के अनुसार:

  • 1-127उपयोगकर्ता परिभाषित कोड हैं (फोन करके उत्पन्न exit(n))
  • 128-255SIGSEGV या SIGTERM जैसे विभिन्न यूनिक्स संकेतों के कारण समाप्ति से उत्पन्न कोड हैं

लेकिन मुझे नहीं लगता कि आपको जावा पर कोडिंग करते समय ध्यान रखना चाहिए, यह सिर्फ थोड़ी जानकारी है। यदि आप अपने कार्यक्रमों को मानक टूल के साथ इंटरैक्ट करने की योजना बनाते हैं तो यह उपयोगी है।


31
यह भी ध्यान दें कि शेल में 0 का एक एक्जिट कोड सही है और कोई भी अन्य कोड गलत है। तो java MyApp && echo success"सफलता" को प्रिंट करेगा यदि IApp का एक्ज़िट कोड 0 है, अर्थात यदि यह कॉल करता है exit(0)या बिना किसी त्रुटि के मुख्य विधि के अंत तक पहुँचता है।
sepp2k

16
कृपया, एग्जिट कोड का हमेशा ध्यान रखें अगर आपका ऐप किसी स्क्रिप्ट में इस्तेमाल किया जा सकता है। आपकी स्क्रिप्ट के बीच में चुपचाप विफल होने वाले एक उपकरण के लिए बहुत कष्टप्रद है (या कुछ स्टैक ट्रेस को प्रिंट करना और 0 से बाहर निकलना)।
डोनचो गुनचेव

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

यह यूनिक्स के * एग्जिट (2) `वास्तव में 'आनुवंशिकता' है।
लोर्ने

127

Zero => सब कुछ ठीक है

Positive => मुझे कुछ उम्मीद थी कि संभवतः गलत हो सकता है (खराब कमांड-लाइन, फ़ाइल नहीं मिल सकती है, सर्वर से कनेक्ट नहीं हो सकती है)

Negative=> कुछ ऐसा जिसकी मुझे उम्मीद नहीं थी वह गलत हो गया (सिस्टम त्रुटि - अप्रत्याशित अपवाद - बाहरी रूप से मजबूर समाप्ति जैसे kill -9)

(128 से अधिक मूल्य वास्तव में नकारात्मक हैं, यदि आप उन्हें 8-बिट हस्ताक्षरित बाइनरी या ट्वोज़ पूरक के रूप में मानते हैं)

यहाँ अच्छे मानक निकास-कोड का भार है


12
"मुझे कुछ गलत होने की उम्मीद थी" गलत लग रहा था जैसे "सब कुछ ठीक है"।
tobe

"डेवलपर के रूप में चीजें जो मुझे अनुमानित रूप से अपेक्षित हो सकती हैं" उपयोगकर्ता त्रुटि बनाम सिस्टम त्रुटि; यह वास्तव में शीर्ष पोस्टर द्वारा कवर किया गया है: मान 128-255 हैं-यह 8-बिट हस्ताक्षरित बाइनरी है।
रॉबर्ट

6
@tobe यह वास्तव में अधिक पसंद है "मुझे उम्मीद है कि कुछ गलत हो सकता है वास्तव में गलत हो गया";)
मार्सेल हर्नांडेज़

1
बैश एग्ज़िट कोड्स को 8-बिट अहस्ताक्षरित मानता है, और 256 को मॉड करेगा, इसलिए -1 -1 255 हो जाता है और 256 बन जाता है। 0. (सिग्नल, ए किल, उदा kill -15) में अक्सर एक्जिट कोड होता है 128+signal, लेकिन (9 से अलग) को संभाला जा सकता है और एक अलग निकास कोड लौटाएं। -में kill -15निशान एक संकेत है न कि पीआईडी के रूप में संख्या है, यह संकेत नकारात्मक नहीं है है।
मैथ्यू

जब आप करते हैं System.exit(-1)और तब आपके शेल में echo $?आपको '255' मिलता है। यही कारण है कि मैंने कहा कि नकारात्मक संख्याएं सिस्टम त्रुटियां हैं, न कि किल पैरामीटर में '-' के कारण। क्या आपने गंभीरता से सोचा कि मैंने क्या सोचा है? लेकिन बाश इन कोड का निर्माण करने वाले तंत्र को समझाने के लिए धन्यवाद।
रॉबर्ट

51

System.exit(system call)वर्तमान में चल रहे जावा वर्चुअल मशीन को इसके शटडाउन अनुक्रम की शुरुआत करके समाप्त करता है। तर्क एक स्थिति कोड के रूप में कार्य करता है ।

अधिवेशन के द्वारा, एक गैर-स्थिति स्थिति कोड असामान्य समाप्ति को इंगित करता है।

  System.exit(0) or EXIT_SUCCESS;  ---> Success
  System.exit(1) or EXIT_FAILURE;  ---> Exception
  System.exit(-1) or EXIT_ERROR;   ---> Error

जावा में अधिक पढ़ें

यूनिक्स और लिनक्स सिस्टम पर, 0सफल निष्पादन के लिए और 1असफल निष्पादन के लिए उच्चतर।


3
यह उत्तर @ रॉबर्ट के उत्तर के साथ विरोधाभास में प्रतीत होता है
amdev

यह जावा डॉक में उल्लेख नहीं किया गया है कि निकास कोड -1 ईआरआरओआर का प्रतिनिधित्व करता है इसके बजाय शब्दांकन "स्थिति - समाप्ति की स्थिति है। सम्मेलन द्वारा, एक गैर-स्थिति स्थिति कोड असामान्य समाप्ति को इंगित करता है।"
दामिथ

EXIT_*जावा में मौजूद नहीं है।
जुआनचिटो

11

एक गैर-शून्य निकास स्थिति कोड, आमतौर पर असामान्य समाप्ति का संकेत देता है। यदि n != 0, प्रोग्रामर के लिए इसका अर्थ विभिन्न n के लिए एक अर्थ लागू करना है।

से https://docs.oracle.com/javase/7/docs/api/java/lang/System.html


6

exit(0)आम तौर पर सफल समाप्ति का संकेत देने के लिए उपयोग किया जाता है। exit(1)या exit(-1)या कोई अन्य गैर-शून्य मान सामान्य रूप से असफल समाप्ति दर्शाता है।


मुझे क्या तर्क देना चाहिए कि कोडर द्वारा तर्क दिया गया है। विधि द्वारा कोई वापसी मान न दें। यह समाप्ति परिणाम का संकेत कैसे दे सकता है?
14


2

एक अच्छा गेटा कोई भी त्रुटि कोड है> 255 को त्रुटि कोड% 256 में बदल दिया जाएगा। किसी को विशेष रूप से इस बारे में सावधान रहना चाहिए कि क्या वे कस्टम त्रुटि कोड> 255 का उपयोग कर रहे हैं और एप्लिकेशन लॉजिक में सटीक त्रुटि कोड की अपेक्षा कर रहे हैं। http://www.tldp.org/LDP/abs/html/exitcodes.html


1

system.exit () में डाले गए नंबरों के अंतर को अन्य उत्तरों में समझाया गया है। लेकिन वास्तविक संदर्भ यह है कि System.exit () एक कोड है जो कि चालान प्रक्रिया में वापस आ जाता है। यदि ऑपरेटिंग सिस्टम द्वारा प्रोग्राम को लागू किया जा रहा है, तो रिटर्न कोड ओएस को बताएगा कि अगर system.exit () 0 सब कुछ की तुलना में ठीक था, लेकिन अगर कुछ गलत नहीं हुआ, तो मूल प्रक्रिया में इसके लिए कुछ हैंडलर हो सकते हैं


0

जैसा कि अन्य लोग उत्तर का 0अर्थ है सफलता, अन्यथा।

यदि आप बैट फाइल (विंडो) का उपयोग करते हैं System.exit(x)तो प्रभाव पड़ेगा।

कोड जावा (myapp):

if (error < 2){
    help();
    System.exit(-1);    
}
else{
    doSomthing();
    System.exit(0);
}

}

बैट फाइल:

java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --

-2

System.exit (0) कन्वेंशन द्वारा, एक नॉनज़रो स्टेटस कोड असामान्य समाप्ति दर्शाता है।

System.exit (1) -इसका अर्थ है किसी त्रुटि के कारण समाप्ति असफल


तर्क हमेशा 'एक स्थिति कोड के रूप में कार्य करता है'। शून्य होने पर ही नहीं।
लोर्ने

अरे हाँ । क्षमा करें, मेरा बुरा EJP
androminor

-7
class calc{
public static void main(String args[])
{
    int a, b, c;
    char ch;
    do{

        Scanner s=new Scanner(System.in);

                System.out.print("1. Addition\n");
                System.out.print("2. Substraction\n");
                System.out.print("3. Multiplication\n");
                System.out.print("4. Division\n");
                System.out.print("5. Exit\n\n");

                System.out.print("Enter your choice : ");
                ch=s.next().charAt(0);
                    switch (ch)
                    {
                        case '1' :
                        Addition chose1=new Addition();
                        chose1.add();
                        break;

                        case '2' :
                        Substraction chose2=new Substraction();
                        chose2.sub();
                        break;

                        case '3' :
                        Multiplication chose3= new Multiplication();
                        chose3.multi();
                        break;

                        case '4' :
                        Division chose4=new Division();
                        chose4.divi();
                        break;

                        case '5' :
                        System.exit(0);
                        break;

                        default :
                        System.out.print("wrong choice!!!");
                        break;
                    }
        System.out.print("\n--------------------------\n");                     
    }while(ch !=5); 
}

}

उपरोक्त कोड में जब इसके System.exit (0); और जब मैं केस 5 दबाता हूं तो यह ठीक से बाहर निकल जाता है लेकिन जब मैं System.exit (1) का उपयोग करता हूं; और प्रेस केस 5 यह त्रुटि के साथ बाहर निकलता है और फिर से जब मैं केस 15 के साथ प्रयास करता हूं तो यह ठीक से बाहर निकलता है मुझे पता चला है कि, जब भी हम किसी भी आंतरिक तर्क को निर्दिष्ट करते हैं तो यह निर्दिष्ट करता है कि, यह उस स्थिति से चरित्र को ले जाता है अर्थात यदि मैं डाल देता हूं (४) इसका अर्थ है कि उस तार से ५ वां वर्ण लिया जाए यदि इसका (३) तो इसका अर्थ है कि इनपुट किए गए तार से ४ वां वर्ण लें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.