সিস্টেমে পার্থক্য। জাভাতে প্রস্থান (0), System.exit (-1), System.exit (1)


280

আমি জাভাতে নিম্নলিখিতগুলির মধ্যে পার্থক্য জানতে চাই

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

কখন আমাকে উপরের কোডটি যথাযথভাবে ব্যবহার করতে হবে?


17
আপনি কেন উত্তরটিকে 'সেরা উত্তর' হিসাবে চিহ্নিত করেন নি তাই সেখানে সবুজ রঙের টিক আছে? এটি অন্যদের জানায় যে সেরাটি কী তা !!
দক্ষম গোয়েল

উত্তর:


252

প্রোগ্রামটির সম্পাদন ভাল বা খারাপ হলে প্রস্থানের প্যারামিটারটি যোগ্য হওয়া উচিত। এটি পুরানো প্রোগ্রামিং ভাষাগুলি থেকে এক ধরণের বংশগতি যেখানে এটি কিছুটা ভুল হয়েছে এবং কোনটি ভুল হয়েছে তা জেনে রাখা কার্যকর।

প্রস্থান কোড হয়

  • 0 মৃত্যুদণ্ড কার্যকর হলে;
  • 1, -1, whatever != 0যখন কিছু ত্রুটি ঘটেছে, আপনি বিভিন্ন মান ত্রুটি বিভিন্ন ধরনের জন্য ব্যবহার করতে পারেন।

যদি আমি সঠিক প্রস্থান কোডগুলি কেবলমাত্র ইতিবাচক সংখ্যা হিসাবে ব্যবহৃত হত (আমি ইউনিক্সের অর্থ) এবং পরিসর অনুসারে:

  • 1-127ব্যবহারকারী সংজ্ঞায়িত কোড (তাই কল করে উত্পন্ন exit(n))
  • 128-255SIGSEGV বা SIGTERM এর মতো বিভিন্ন ইউনিক্স সিগন্যালের কারণে সমাপ্তি দ্বারা উত্পন্ন কোডগুলি

তবে জাভাতে কোডিংয়ের সময় আপনার যত্ন নেওয়া উচিত বলে আমি মনে করি না, এটি কেবলমাত্র সামান্য তথ্য। আপনি যদি আপনার প্রোগ্রামগুলিকে মানক সরঞ্জামের সাথে ইন্টারঅ্যাক্ট করার পরিকল্পনা করেন তবে এটি কার্যকর।


31
এছাড়াও মনে রাখবেন যে শেলের মধ্যে 0 এর একটি প্রস্থান কোডটি সত্য হিসাবে গণনা করা হয় এবং অন্য কোনও কোডকে মিথ্যা বলে গণ্য করে। সুতরাং java MyApp && echo success"সাফল্য" প্রিন্ট করবে যদি মাই অ্যাপে 0 এর একটি প্রস্থান কোড থাকে, অর্থাত্ যদি এটি কল করে exit(0)বা কোনও ত্রুটি ছাড়াই মূল পদ্ধতির শেষে পৌঁছায়।
sepp2k

16
আপনার অ্যাপ্লিকেশনটি কোনও স্ক্রিপ্টে ব্যবহার করতে পারলে দয়া করে সর্বদা প্রস্থান কোডের যত্ন নিন। আপনার স্ক্রিপ্টের মাঝখানে কোনও সরঞ্জাম নিঃশব্দে ব্যর্থ হওয়া (বা কিছু স্ট্যাক ট্রেস মুদ্রণ করা এবং 0 দিয়ে প্রস্থান করা) খুব বিরক্তিকর।
ডনচো গুনচেভ

6
একটি বিষয় লক্ষণীয়: -১ ফেরার সময় সর্বাধিক সম্ভাব্য ইতিবাচক সংখ্যা স্বাক্ষরবিহীন প্রসঙ্গে ফিরে আসে (দু'জনের পরিপূরক উপস্থাপনায় -1 সর্বদা সংখ্যার বাইট সংখ্যা নির্বিশেষে সমস্ত বিট সেট করে)। সুতরাং -1 সাধারণত ফিরে আসে যখন আপনি একটি অ-নির্দিষ্ট ত্রুটি ফিরিয়ে দেন এবং এটি ইতিমধ্যে সংজ্ঞায়িত এবং ডকুমেন্টেড সম্ভাব্য ত্রুটি কোডগুলির সাথে সংঘর্ষে আসতে চান না। যেমন ত্রুটি কোড 1 লিখিত ত্রুটি হিসাবে নথিভুক্ত করা যেতে পারে; ত্রুটি কোড 2 পড়তে ত্রুটি ইত্যাদি হতে পারে ইত্যাদি
নাইলন হাসি

এটি ইউনিক্সের * প্রস্থান (2) - থেকে আসলে 'ধরণের বংশগতি'।
লার্নের মার্কুইস

127

Zero => সব ঠিক আছে

Positive => আমার প্রত্যাশিত কিছুটি সম্ভাব্যভাবে ভুল হতে পারে ভুল হয়ে গেছে (খারাপ কমান্ড-লাইন, ফাইল খুঁজে পাচ্ছে না, সার্ভারের সাথে সংযোগ করতে পারেনি)

Negative=> আমি প্রত্যাশা করি না এমন কিছু ভুল হয়ে গেছে (সিস্টেম ত্রুটি - প্রত্যাশিত ব্যতিক্রম - বাহ্যিকভাবে বাধ্যতামূলক সমাপ্তি উদাহরণস্বরূপ kill -9)

(আপনি যদি 8-বিট স্বাক্ষরিত বাইনারি বা দ্বিগুণ পরিপূরক হিসাবে বিবেচনা করেন তবে 128 এর চেয়ে বেশি মানগুলি আসলে নেতিবাচক)

এখানে ভাল মানের প্রস্থান-কোডের একটি ভার রয়েছে


12
"সব কিছু ঠিক আছে" এর মতো "" আমার কিছুটা ভুল হওয়ার আশা করা হয়েছিল কিছু ভুল হয়ে গেছে "sounds
Tobe

"বিকাশকারী হিসাবে আমি যে জিনিসগুলি যথাযথভাবে প্রত্যাশা করতে পারি" ব্যবহারকারী ত্রুটি বনাম সিস্টেম ত্রুটি; এটি প্রকৃতপক্ষে শীর্ষ পোস্টার দ্বারা আচ্ছাদিত: 128-255 এর মানগুলি 8-বিট স্বাক্ষরিত বাইনারি ve
রবার্ট

6
@ টোব এটি সত্যই আরও বেশি "" আমার প্রত্যাশার কিছু ভুল হতে পারে আসলে ভুল হয়ে গেছে ";)
মার্সেল হার্নান্দেজ

1
ব্যাশ একইরূপে প্রস্থান কোড 8-বিট স্বাক্ষরবিহীন, এবং 256 mod হবে, তাই একটি -1 255 হয়ে যায় এবং 256 0. সংকেত (যেমন একটি হত্যা মধ্যে হয়ে kill -15) প্রায়ই প্রস্থান কোড ফলে 128+signalকিন্তু (9 থেকে সরাইয়া) পরিচালিত করা যেতে পারে এবং একটি ভিন্ন প্রস্থান কোড ফেরান -মধ্যে kill -15চিহ্ন একটি সংকেত এবং একটি PID যেমন নম্বর, এটা সংকেত নেতিবাচক করতে না।
ম্যাথু

আপনি যখন করেন System.exit(-1)এবং তারপরে আপনার শেলের মধ্যে echo $?আপনি '255' পান। এ কারণেই আমি বলেছিলাম negativeণাত্মক সংখ্যাগুলি সিস্টেম ত্রুটি, কিল প্যারামিটারে '-' এর কারণে নয়। আপনি কি গুরুত্ব সহকারে ভেবে দেখেছেন? তবে বাশ এই কোডগুলি তৈরি করে এমন পদ্ধতিটি ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
রবার্ট

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
এই উত্তরটি @
রবার্টের

এটি জাভা ডকটিতে উল্লেখ করেনি যে প্রস্থান কোড -1 এর শব্দের পরিবর্তে ERROR প্রতিনিধিত্ব করে "স্থিতি - সমাপ্তির স্থিতি। কনভেনশন অনুসারে, একটি ননজারো স্থিতি কোড অস্বাভাবিক সমাপ্তি নির্দেশ করে।"
দামিথ

EXIT_*জাভাতে নেই।
জুনাচিতো

11

একটি শূন্য-বহির্গমন স্থিতি কোড, সাধারণত অস্বাভাবিক সমাপ্তি নির্দেশ করে। যদি n != 0, বিভিন্ন এন এর একটি অর্থ প্রয়োগ করার জন্য এটি প্রোগ্রামারটির উপর নির্ভর করে।

Https://docs.oracle.com/javase/7/docs/api/java/lang/System.html থেকে ।


6

exit(0)সাধারণত সফল সমাপ্তি নির্দেশ করতে ব্যবহৃত হয়। exit(1)বা exit(-1)বা অন্য কোনও শূন্য-মান সাধারণভাবে ব্যর্থ সমাপ্তির ইঙ্গিত দেয়।


আর্গুমেন্টটি কোডার দ্বারা আমার কী cofuse হয় method পদ্ধতিটি দ্বারা কোনও প্রত্যাবর্তনের মান নেই it এটি সমাপ্তির ফলাফলকে কীভাবে নির্দেশ করতে পারে?
ankotliner


2

একটি ভাল গ্যাচা হ'ল যে কোনও ত্রুটি কোড> 255 ত্রুটি কোড% 256 তে রূপান্তরিত হবে One তারা যদি কাস্টম ত্রুটি কোড> 255 ব্যবহার করে এবং অ্যাপ্লিকেশন যুক্তিতে সঠিক ত্রুটি কোডের আশা করে তবে এ সম্পর্কে বিশেষভাবে সতর্ক হওয়া উচিত। http://www.tldp.org/LDP/abs/html/exitcodes.html


1

system.exit () এ দেওয়া সংখ্যার পার্থক্য অন্যান্য উত্তরে ব্যাখ্যা করা হয়েছে। কিন্তু বাস্তব বিভাজনটি হ'ল System.exit () একটি কোড যা আমন্ত্রণমূলক প্রক্রিয়াতে ফিরে আসে। যদি অপারেটিং সিস্টেমের মাধ্যমে প্রোগ্রামটি চালু করা হয় তবে রিটার্ন কোডটি ওএসকে বলবে যদি system.exit () সবকিছু ঠিকঠাকের চেয়ে 0 ফেরত দেয় তবে কিছু ভুল না হলে পিতামাতার প্রসেসে এর জন্য কিছু হ্যান্ডলার থাকতে পারে


0

অন্যরা যেমন 0সাফল্যের অর্থ উত্তর দেয় , অন্যথায়।

আপনি যদি ব্যাট ফাইল (উইন্ডো) ব্যবহার করেন System.exit(x)তবে প্রভাব ফেলবে।

কোড জাভা (মায়াপ):

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) কনভেনশন অনুসারে, একটি nonzero স্থিতি কোড অস্বাভাবিক সমাপ্তি নির্দেশ করে।

কে System.exit (1) - এর অর্থ কিছু ত্রুটির কারণে সমাপ্তি ব্যর্থ


যুক্তি সর্বদা 'স্থিতি কোড হিসাবে কাজ করে'। শূন্য হলেই নয়।
লার্নের মারকুইস

হ্যাঁ . দুঃখিত আমার খারাপ
ইজেপি

-6
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 কেস দিয়ে চেষ্টা করি তবে এটি জানতে পেরেছিলাম যে, যখনই আমরা কোনও যুক্তির ভিতরে যুক্ত করি তবে এটি নির্দিষ্ট করে, এটি সেই অবস্থান থেকে চরিত্রটি গ্রহণ করে যদি আমি রাখি তবে (4) এর অর্থ এই স্ট্রিং থেকে 5 তম অক্ষর গ্রহণ করা হয় যদি এর (3) থাকে তবে এর অর্থ সেই ইনপুটড স্ট্রিং থেকে চতুর্থ অক্ষর নেওয়া

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.