java जावा प्रोसेस्बिल्डर एक्सेगुलेव्यू



process exit-code (1)

मैं सी-कोड में निष्पादन योग्य चलाने के लिए प्रोसेसर निर्माता के माध्यम से प्रक्रिया का उपयोग कर रहा हूं। इस निकास कोड पर प्रतिक्रिया देने के लिए, मैं निकास मान को पकड़ रहा हूं। मैंने देखा कि सभी एक्सेक्यूटोड्स निष्पादन योग्य से हैं। उदाहरण के लिए, मुझे अभी से बाहर निकलने का मूल्य 13 9 मिलता है और मेरे सी-कोड में कहीं नहीं मैं 13 9 का एक एक्जिज्यूवल्यू वापस कर रहा हूँ। मैं एक्सेक्टकोड्स का अवलोकन करने की कोशिश कर रहा हूं, लेकिन मुझे यह नहीं मिल रहा है, और अब मुझे पता चला कि निकास कोड ओएस निर्भर हो सकता है। (मैं जिस तरह से उबुंटू का उपयोग कर रहा हूँ)। ऐसा लगता है कि केवल निकलने के लिए केवल 0 है जब सबकुछ ठीक हो जाता है। क्या एक्सेप्लेव्यू के बारे में कोई समझौता है? क्या मुझे यकीन है कि एक निश्चित श्रेणी का इस्तेमाल केवल अपने कार्यक्रम के लिए किया जा सकता है? बाहर निकलने के कोड ओ के लिए आरक्षित होते हैं। मुझे पता चला कि 13 9 संभवत: सी-कोड में एक मेमोरी एरर है .... मैं संभवतः से छुटकारा चाहूंगा .... मुझे बाहर निकलने के कोड का कोई अवलोकन नहीं मिल सकता है । 13 9 = ..... (यकीन के लिए)

इस तरह से कोड है (कुछ सामान साफ़ किया गया)

ProcessBuilder p = new ProcessBuilder(executableName,
                    executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();

नोट: क्यू में निष्पादन योग्य सी चलाने से उबंटु में कोई त्रुटि नहीं होती है .... तो जावा से प्रक्रिया में एक ही कमांड करना, एक्सक्लुवल 139 देता है, लेकिन शेल में यह एक्सक्लव्यू 0 देता है


यदि सिस्टम आपके आवेदन को मारता है (जैसे सेगमेंटेशन गलती के मामले में) यह 128 + सिग्नल को निकास कोड सेट करता है - संकेत मूल्यों के लिए लिनक्स signal(7) मैनपैंट देखें

इसके अलावा, लिनक्स के लिए, कई मूलभूत निकास कोड sysexits.h हैडर फ़ाइल में परिभाषित किए sysexits.h , और यह अनुशंसा की जाती है कि प्रोग्रामर sysexits.h स्वयं के मूल्यों को परिभाषित करने के बजाय उन स्थिरांक का उपयोग करें। से exit(3) मैनपेज :

बीएसडी ने निकास कोड को मानकीकृत करने का प्रयास किया है; फ़ाइल <sysexits.h> देखें

आप फ़ाइल को यहां उदाहरण के लिए पा सकते हैं, और इसमें शामिल मान हैं:

#define EX_OK           0  /* successful termination */

#define EX__BASE        64  /* base value for error messages */

#define EX_USAGE        64  /* command line usage error */
#define EX_DATAERR      65  /* data format error */
#define EX_NOINPUT      66  /* cannot open input */
#define EX_NOUSER       67  /* addressee unknown */
#define EX_NOHOST       68  /* host name unknown */
#define EX_UNAVAILABLE  69  /* service unavailable */
#define EX_SOFTWARE     70  /* internal software error */
#define EX_OSERR        71  /* system error (e.g., can't fork) */
#define EX_OSFILE       72  /* critical OS file missing */
#define EX_CANTCREAT    73  /* can't create (user) output file */
#define EX_IOERR        74  /* input/output error */
#define EX_TEMPFAIL     75  /* temp failure; user is invited to retry */
#define EX_PROTOCOL     76  /* remote error in protocol */
#define EX_NOPERM       77  /* permission denied */
#define EX_CONFIG       78  /* configuration error */

#define EX__MAX         78  /* maximum listed value */

हालांकि, उनका उपयोग अनिवार्य नहीं है, और आप किसी भी मूल्य का उपयोग करने के लिए स्वतंत्र हैं।

सामान्य जवाब है - यदि आपका आवेदन बेहद असफल हो गया है (यानी यह त्रुटि को पूर्ण निष्पादन को संभालने में सक्षम है), तो यह स्वतः निकास कोड सेट करता है यदि सिस्टम द्वारा सिस्टम को मार दिया जाता है, तो यह सिस्टम है जो निकास कोड सेट करता है।

आप कुछ अतिरिक्त जानकारी के लिए यह धागा भी देख सकते हैं।





exit-code