Node.js में कैसे बाहर निकलें




(12)

बाहर निकलने के लिए उपयोग की जाने वाली कमांड क्या है? (यानी node.js प्रक्रिया समाप्त)


बस एक नोट है कि process.exit([number]) का उपयोग अभ्यास exit है।

कारण यह समस्याग्रस्त है क्योंकि प्रक्रिया के लिए लिखते हैं। Node.js में stdout गैर-अवरुद्ध होते हैं और Node.js ईवेंट लूप के एकाधिक टिकों पर हो सकते हैं। कॉलिंग process.exit (), हालांकि, stdout को उन अतिरिक्त लिखने से पहले बाहर निकलने के लिए प्रक्रिया को मजबूर करता है।

Process.exit () को सीधे कॉल करने के बजाय, कोड को process.exitCode सेट करना चाहिए और ईवेंट लूप के लिए कोई अतिरिक्त कार्य शेड्यूल करने से बचने के लिए प्रक्रिया को स्वाभाविक रूप से बाहर निकलने की अनुमति दें:

यदि आप एक्जिट कोड सेट कर सकते हैं और नोड को शानदार तरीके से बाहर निकलने की अनुमति दे सकते हैं:

process.exitCode = 1;

वैश्विक process ऑब्जेक्ट की exit विधि को कॉल करें:

process.exit()

दस्तावेज़ों से:

process.exit ([कोड])

निर्दिष्ट code साथ प्रक्रिया समाप्त होता है। यदि छोड़ा गया है, तो बाहर निकलें 'सफलता' कोड 0 का उपयोग करता है।

'विफलता' कोड से बाहर निकलने के लिए:

process.exit(1);

नोड को निष्पादित करने वाले खोल को निकास कोड को 1 के रूप में देखना चाहिए।


आधिकारिक nodejs.org दस्तावेज़ीकरण से:

process.exit(code)

निर्दिष्ट कोड के साथ प्रक्रिया समाप्त होता है। यदि छोड़ा गया है, तो बाहर निकलें 'सफलता' कोड 0 का उपयोग करता है।

'विफलता' कोड से बाहर निकलने के लिए:

process.exit(1);

जैसा कि @ डोमिनिक ने इंगित किया है, exit प्रक्रिया.एक्सिट ([कोड]) को कॉल करने के बजाय बेहतर अभ्यास है:
process.exitCode = 1; throw new Error("my module xx condition failed");


यह इस कारण पर निर्भर करता है कि आप node.js प्रक्रिया से बाहर निकलने के इच्छुक क्यों हैं, लेकिन किसी भी मामले में process.exit() पर विचार करने का अंतिम विकल्प है । दस्तावेज़ीकरण से एक उद्धरण:

यह ध्यान रखना महत्वपूर्ण है कि कॉलिंग process.exit() प्रक्रिया को जितनी जल्दी हो सके बाहर निकलने के लिए मजबूर कर देगी, भले ही अभी भी असीमित सिंक्रनाइज़ेशन ऑपरेशन लंबित हैं जो अभी तक पूरी तरह से पूर्ण नहीं हुए हैं, I / O संचालन को process.stdout और process.stderr

ज्यादातर स्थितियों में, process.exit() स्पष्ट रूप से कॉल करना वास्तव में आवश्यक नहीं है। यदि ईवेंट लूप में कोई अतिरिक्त कार्य लंबित नहीं है तो Node.js प्रक्रिया स्वयं से बाहर निकल जाएगी। process.exitCode प्रॉपर्टी को उस प्रक्रिया को बताने के लिए सेट किया जा सकता है जो प्रक्रिया को बाहर निकलने पर उपयोग करने के लिए बाहर निकलने के लिए कोड से बाहर निकलता है।

आइए संभव कारणों को कवर करें कि आप node.js प्रक्रिया से बाहर निकलने के इच्छुक क्यों हो सकते हैं और आपको process.exit() से क्यों बचना चाहिए:

प्रकरण 1 - निष्पादन पूर्ण (कमांड लाइन स्क्रिप्ट)

यदि स्क्रिप्ट अपने अंत तक पहुंच गई है और नोड दुभाषिया बाहर नहीं निकलता है, तो यह इंगित करता है कि कुछ एसिंक ऑपरेशन अभी भी लंबित हैं। इस बिंदु पर process.exit() साथ प्रक्रिया समाप्ति को बल देना गलत है। समझने की कोशिश करना बेहतर है कि आपकी स्क्रिप्ट को अपेक्षित तरीके से बाहर निकलने से क्या हो रहा है । और जब आप इसे व्यवस्थित करते हैं, तो आप process.exitCode में किसी भी परिणाम को वापस करने के लिए process.exitCode का उपयोग कर सकते हैं।

केस 2 - बाहरी सिग्नल (सिगिनट / सिगरेट / अन्य) की वजह से समाप्ति

उदाहरण के लिए, यदि आप एक स्पष्ट ऐप को चुपचाप बंद करने के इच्छुक हैं। कमांड लाइन स्क्रिप्ट के विपरीत, एक्सप्रेस ऐप असीमित रूप से चल रहा है, नए अनुरोधों की प्रतीक्षा कर रहा है। process.exit() यहां एक खराब विकल्प होगा क्योंकि यह पाइपलाइन में मौजूद सभी अनुरोधों को बाधित करने जा रहा है। और उनमें से कुछ गैर-बेवकूफ हो सकते हैं (अद्यतन, हटाएं)। ग्राहक कभी नहीं जान पाएगा कि क्या वे अनुरोध सर्वर के पक्ष में पूर्ण हैं या नहीं और यह क्लाइंट और सर्वर के बीच डेटा असंगतता का कारण हो सकता है। एकमात्र अच्छा समाधान है कि नए सर्वर को स्वीकार करना बंद करने के लिए http सर्वर को बताना और लंबित लोगों को server.close() साथ समाप्त करने का इंतजार करना है:

var express = require('express');
var app = express();
var server = app.listen(80);

process.on( 'SIGTERM', function () {
   server.close(function () {
     console.log("Finished all requests");
   });
});

अगर यह अभी भी बाहर नहीं निकलता है - केस 1 देखें।

प्रकरण 3 - आंतरिक त्रुटि

त्रुटि को throw हमेशा बेहतर होता है, आपको एक अच्छी तरह से स्वरूपित स्टैक ट्रेस और त्रुटि संदेश मिल जाएगा। कोड के ऊपरी स्तर हमेशा तय कर सकते हैं कि क्या वे त्रुटि ( catch ) को संभाल सकते हैं या इसे प्रक्रिया को क्रैश कर सकते हैं। दूसरी ओर, process.exit(1) चुपचाप प्रक्रिया को समाप्त कर देगा और इससे पुनर्प्राप्त करने का कोई मौका नहीं होगा। यह process.exit() का एकमात्र "लाभ" हो सकता है, आप सुनिश्चित कर सकते हैं कि प्रक्रिया समाप्त हो जाएगी।


कोड से आप process.exit([errorcode]) उपयोग कर सकते हैं जहां [errorcode] एक वैकल्पिक पूर्णांक है ( 0 सफलता को इंगित करने के लिए डिफ़ॉल्ट है)।

यदि आप रीड इवल प्रिंट लूप (आरईपीएल) का उपयोग कर रहे हैं, तो आप Ctrl + D का उपयोग कर सकते हैं या टाइप .exit टाइप कर सकते हैं

वैकल्पिक रूप से, विंडोज या लिनक्स पर आप Ctrl + C , Ctrl + C का उपयोग कर सकते हैं

मैक पर कमांड Ctrl + Z , Ctrl + Z है


कमांड लाइन

CTRL + C दो बार दबाएं

या

.exit टाइप .exit और एंटर दबाएं

स्क्रिप्ट फाइल

process.exit(code)

कमांड लाइन से, .exit वह है जो आप चाहते हैं:

$ node
> .exit
$

यह आरईपीएल दस्तावेज़ों में प्रलेखित है। आरईपीएल (रीड-इवल-प्रिंट-लूप) नोड कमांड लाइन कहलाता है।

एक सामान्य प्रोग्राम से, process.exit([code])


मेरे पास एक ऐसा एप्लीकेशन है जो मैं चाहता था:

  1. उपयोगकर्ता को एक ईमेल भेजें
  2. एक त्रुटि कोड से बाहर निकलें

मुझे process.exit(code) से exit लिए process.exit(code) को हुक करना था, या अन्यथा कॉलिंग process.exit(code) बाद मेल नहीं भेजा जाएगा process.exit(code) सीधे एसिंक्रोनस घटनाओं को मारता है।

#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
  to: 'Dave Bowman',
  from: 'HAL 9000',
  subject: 'Sorry Dave',
  html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });

आरईपीएल (कमांड लाइन)

  • ctrl + c दो बार दबाएं

  • .exit टाइप .exit और एंटर दबाएं

स्क्रिप्ट फाइल

process.exit(code)

नोड आमतौर पर कोड 0 से बाहर निकलता है जब एसिंक ऑपरेशन लंबित नहीं होते हैं।

process.exit(1) का उपयोग विफलता कोड से बाहर निकलने के लिए किया जाना चाहिए। इससे हमें यह अनुमान लगाने की अनुमति मिल जाएगी कि नोड ने गहराई से बंद नहीं किया और उसे बंद करने के लिए मजबूर होना पड़ा।

जैसे अन्य निकास कोड हैं

3 - आंतरिक जावास्क्रिप्ट पार्स त्रुटि (बहुत दुर्लभ)

5 - v8 जावास्क्रिप्ट इंजन में घातक त्रुटि

9 - अवैध तर्क

पूर्ण सूची के लिए नोड निकास कोड देखें


बाहर निकलने के लिए

let exitCode = 1;
process.exit(exitCode)

उपयोगी निकास कोड

1 - Catchall for general errors
2 - Misuse of shell builtins (according to Bash documentation)
126 - Command invoked cannot execute
127 - “command not found”
128 - Invalid argument to exit
128+n - Fatal error signal “n”
130 - Script terminated by Control-C
255\* - Exit status out of range

यदि आप यूनिक्स टर्मिनल या विंडोज कमांड लाइन में हैं और नोड आरईपीएल से बाहर निकलना चाहते हैं, तो ...

  • Ctrl + C दो बार दबाएं , या
  • .exit टाइप .exit और एंटर दबाएं, या
  • एक लाइन की शुरुआत में Ctrl + D दबाएं (केवल यूनिक्स)






node.js