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




(10)

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

process.exit(code)

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

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

process.exit(1);

https://code.i-harness.com

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


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

$ node
> .exit
$

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

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


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


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

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

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

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

process.exitCode = 1;

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

  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); });

मैं अपने सभी नोड प्रक्रियाओं को taskkill -F -IM node.exe टाइप करके सीधे विंडोज 10 पर गिट बैश खोल से मरने में सक्षम था - यह मेरे कंप्यूटर पर एक बार में सभी नोड प्रक्रियाओं को समाप्त करता है। मैंने पाया कि मैं taskkill //F //IM node.exe भी उपयोग कर सकता taskkill //F //IM node.exe । निश्चित नहीं है कि इस संदर्भ में दोनों - और // क्यों काम करते हैं। उम्मीद है की यह मदद करेगा!


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

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

यह इस कारण पर निर्भर करता है कि आप 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() का एकमात्र "लाभ" हो सकता है, आप सुनिश्चित कर सकते हैं कि प्रक्रिया समाप्त हो जाएगी।


कमांड लाइन

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

या

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

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

process.exit(code)

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

process.exit()

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

process.exit ([कोड])

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

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

process.exit(1);

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





node.js