वह कौन सी कमांड है जो बाहर निकलने के लिए उपयोग की जाती है? (अर्थात Node.js प्रक्रिया समाप्त करें)
वह कौन सी कमांड है जो बाहर निकलने के लिए उपयोग की जाती है? (अर्थात Node.js प्रक्रिया समाप्त करें)
जवाबों:
वैश्विक process
वस्तु exit
विधि को बुलाओ :
process.exit()
process.exit ([कोड])
निर्दिष्ट के साथ प्रक्रिया को समाप्त करता है
code
। यदि छोड़ दिया जाता है, तो निकास 'सफलता' कोड का उपयोग करता है0
।'विफलता' कोड के साथ बाहर निकलने के लिए:
process.exit(1);
नोड को निष्पादित करने वाले शेल को बाहर निकलने के कोड को देखना चाहिए
1
।
exit
बिल्कुल भी भ्रामक नहीं है। आप भ्रमित हैं कि नोड कैसे काम करता है। नोड को ही सर्वर समझें। यह जरूरत के अनुसार नहीं निकाला गया है, जैसे कि Apache जैसे वेब सर्वर के अंदर PHP है। नोड के पास वेब सर्वर के साथ करने के लिए कुछ भी नहीं है! यह कुछ जावास्क्रिप्ट के लिए एक मेजबान है, कुछ निफ्टी में निर्मित पुस्तकालयों के साथ उपयोगी चीजें करने के लिए।
mod_php
अपाचे के साथ इसे चलाने या उपयोग करने की आवश्यकता नहीं है । आप PHP में एक httpd को फिर से लागू कर सकते हैं जैसे नोड यदि आप वास्तव में चाहते हैं या FastCGI जैसे अधिक समझदार / मानकीकृत दृष्टिकोण का उपयोग कर सकते हैं जैसे आप नोड में कर सकते हैं।
process.exit()
है की सलाह नहीं दी , में वर्णित के रूप में नीचे इस सवाल का जवाब ।
बस एक ध्यान दें कि प्रयोग करने process.exit([number])
की अनुशंसा नहीं की जाती है।
कॉलिंग process.exit () इस प्रक्रिया को जितनी जल्दी हो सके बाहर निकलने के लिए मजबूर करेगा भले ही अभी भी अतुल्यकालिक संचालन लंबित हैं जो अभी तक पूरी तरह से पूरा नहीं हुए हैं, जिनमें I / O संचालन से प्रक्रिया .stdout और process.stderr शामिल हैं।
ज्यादातर स्थितियों में, यह वास्तव में प्रोसेस.एक्सिट () को स्पष्ट रूप से कॉल करने के लिए आवश्यक नहीं है। यदि ईवेंट लूप में कोई अतिरिक्त कार्य लंबित नहीं है, तो Node.js प्रक्रिया अपने आप बाहर निकल जाएगी। प्रक्रिया .exitCode गुण प्रक्रिया को यह बताने के लिए सेट किया जा सकता है कि कौन सी प्रक्रिया से बाहर निकलने के लिए कोड का उपयोग किया जाता है जब प्रक्रिया शान से बाहर निकलती है।
उदाहरण के लिए, निम्न उदाहरण प्रक्रिया का एक दुरुपयोग दिखाता है ।exit () विधि जो डेटा को प्रिंट किए जाने वाले डेटा को प्रिंट और खो जाने के लिए ले जा सकती है:
// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
इसका कारण यह समस्याग्रस्त है क्योंकि Node.js में process.stdout को लिखना कभी-कभी अतुल्यकालिक होता है और यह Node.js ईवेंट लूप के कई टिक्स पर हो सकता है। कॉलिंग process.exit (), हालांकि, प्रक्रिया को बाहर निकलने के लिए मजबूर करती है, इससे पहले कि अतिरिक्त स्टडआउट को लिखा जा सकता है।
कॉल करने की प्रक्रिया के बजाय .exit () सीधे, कोड को process.exitCode सेट करना चाहिए और इवेंट लूप के लिए किसी भी अतिरिक्त कार्य को शेड्यूल करने से बचने के लिए प्रक्रिया को स्वाभाविक रूप से बाहर निकलने की अनुमति दें:
// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()
लिए इरादा है।
आधिकारिक njjs.org प्रलेखन से:
process.exit(code)
निर्दिष्ट कोड के साथ प्रक्रिया को समाप्त करता है। यदि छोड़ा गया है, तो निकास 'सफलता' कोड 0 का उपयोग करता है।
'विफलता' कोड के साथ बाहर निकलने के लिए:
process.exit(1);
code = 0; process.exit(code);
code
?
process.exit()
जिसका कोई मानदंड नहीं है क्योंकि कोड डिफॉल्ट को 0
process.exit(0);
और इसे चलाते हैं तो node exit_0.js && echo 'success'
इसे "सफलता" कहेंगे। यदि आप से बाहर निकलें_1.js बनाते हैं process.exit(1);
और node exit_1.js && echo 'success'
इसे चलाते हैं तो यह "सफलता" नहीं कहेगा क्योंकि आपकी प्रक्रिया एक गैर-शून्य (जो कि "विफलता" या "असामान्य निकास" शेल को इंगित करती है) के साथ बाहर निकलती है। इसके अलावा, आप $?
यदि आप node exit_1.js
बनाम node exit_0.js
(आप कर रहे हैं node exit_1.js
और फिर कर सकते हैं echo $?
) चलाने में विभिन्न मूल्यों देखेंगे ।
यदि आप यूनिक्स टर्मिनल या विंडोज कमांड लाइन में हैं और नोड REPL से बाहर निकलना चाहते हैं, तो ...
.exit
और Enter दबाएं, याnode
आरईपीएल, बाहर निकलने के लिए Ctrl + D एक मानक व्यवहार, तो यह भी विंडोज पर काम करता है।
कमांड लाइन से, .exit
आप क्या चाहते हैं:
$ node
> .exit
$
यह REPL डॉक्स में प्रलेखित है । REPL (Read-Eval-Print-Loop) जिसे नोड कमांड लाइन कहा जाता है।
एक सामान्य कार्यक्रम से, उपयोग करें process.exit([code])
।
यह इस कारण पर निर्भर करता है कि आप नोड.जेएस प्रक्रिया से बाहर निकलने के इच्छुक क्यों हैं, लेकिन किसी भी मामले process.exit()
में विचार करने का अंतिम विकल्प है । प्रलेखन से एक उद्धरण:
यह नोट करना महत्वपूर्ण है कि कॉलिंग
process.exit()
प्रक्रिया को जितनी जल्दी हो सके बाहर निकलने के लिए मजबूर करेगी भले ही अभी भी अतुल्यकालिक संचालन लंबित हैं जो अभी तक पूरी तरह से पूरा नहीं हुए हैं, जिनमें I / O संचालनprocess.stdout
औरprocess.stderr
।ज्यादातर स्थितियों में, वास्तव में
process.exit()
स्पष्ट रूप से कॉल करना आवश्यक नहीं है । यदि ईवेंट लूप में कोई अतिरिक्त कार्य लंबित नहीं है, तो Node.js प्रक्रिया स्वयं से बाहर हो जाएगी।process.exitCode
संपत्ति प्रक्रिया है जो बाहर निकलें कोड जब प्रक्रिया बाहर निकलता है शान से उपयोग करने के लिए बताने के लिए सेट किया जा सकता।
चलो संभावित कारणों को कवर करते हैं कि आप नोड से बाहर निकलने के लिए तैयार क्यों हो सकते हैं। जेएस प्रक्रिया और आपको क्यों बचना चाहिए process.exit()
:
यदि स्क्रिप्ट अपने अंत तक पहुँच चुकी है और नोड इंटरप्रिटर से बाहर नहीं निकलती है, तो यह इंगित करता है कि कुछ एसिंक्स ऑपरेशन अभी भी लंबित हैं। process.exit()
इस बिंदु पर प्रक्रिया समाप्ति को बल देना गलत है । यह समझने की कोशिश करना बेहतर है कि आपकी स्क्रिप्ट को अपेक्षित तरीके से बाहर निकलने से रोक रहा है । और जब आप इसे निपटाते हैं, तो आप process.exitCode
किसी भी परिणाम को कॉलिंग प्रक्रिया में वापस करने के लिए उपयोग कर सकते हैं ।
उदाहरण के लिए, यदि आप किसी एक्सप्रेस ऐप को शालीनतापूर्वक बंद करने के लिए तैयार हैं । कमांड लाइन स्क्रिप्ट के विपरीत, एक्सप्रेस एप्लिकेशन असीम रूप से चलता रहता है, नए अनुरोधों की प्रतीक्षा करता है। process.exit()
यहां एक बुरा विकल्प होगा क्योंकि यह उन सभी अनुरोधों को बाधित करने वाला है जो पाइपलाइन में हैं। और उनमें से कुछ नॉन-इम्पोटेंट (UPDATE, DELETE) हो सकते हैं। क्लाइंट को कभी पता नहीं चलेगा कि वे अनुरोध सर्वर की तरफ से पूरे हुए हैं या नहीं और यह क्लाइंट और सर्वर के बीच डेटा असंगतता का कारण हो सकता है। नया अनुरोध स्वीकार करने से रोकने और लंबित लोगों के समाप्त होने की प्रतीक्षा करने के लिए 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 देखें।
यह हमेशा throw
एक त्रुटि के लिए बेहतर है , आपको एक अच्छी तरह से स्वरूपित स्टैक ट्रेस और त्रुटि संदेश मिलेगा। कोड के ऊपरी स्तर हमेशा तय कर सकते हैं कि क्या वे त्रुटि को संभाल सकते हैं ( catch
) या इसे प्रक्रिया को क्रैश करने दें। दूसरी तरफ, process.exit(1)
चुपचाप प्रक्रिया को समाप्त कर देगा और इससे उबरने का कोई मौका नहीं होगा। यह केवल "लाभ" हो सकता है process.exit()
, आप यह सुनिश्चित कर सकते हैं कि प्रक्रिया समाप्त हो जाएगी।
Process.exit()
अधिकांश अनुप्रयोगों के लिए प्रमुख ओवरकिल जैसा दिखता है। मैं php के मरने () फंक्शन के बराबर की तलाश कर रहा था ... और अधिक पसंद करें:throw new Error('die msg')
REPL (कमांड लाइन)
दो बार दबाएंctrl + c
टाइप करें .exit
और एंटर दबाएं
स्क्रिप्ट फाइल
process.exit(code)
नोड आमतौर पर कोड 0 के साथ बाहर निकलता है जब कोई अधिक async संचालन लंबित होता है।
process.exit(1)
एक विफलता कोड के साथ बाहर निकलने के लिए इस्तेमाल किया जाना चाहिए। यह हमें अनुमान लगाने की अनुमति देगा कि नोड इनायत से बंद नहीं हुआ था और बंद होने के लिए मजबूर किया गया था।
जैसे अन्य निकास कोड हैं
3 - आंतरिक जावास्क्रिप्ट पार्स त्रुटि (बहुत दुर्लभ)
5 - v8 जावास्क्रिप्ट इंजन में घातक त्रुटि
9 - अमान्य तर्क
पूरी सूची के लिए नोड निकास कोड देखें
मेरे पास एक एप्लिकेशन है जिसे मैं चाहता था:
मुझे process.exit(code)
एक exit
इवेंट हैंडलर को हुक करना था , वरना 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); });
process.exitCode
मेरे लिए एक कमांड-लाइन टूल में काम करने की कोशिश कर रहा था, जिसका मैं निर्माण कर रहा हूं (Node v4.3.0 पर परीक्षण)। लेकिन मैं इसे दस्तावेज के रूप में व्यवहार करने के लिए नहीं मिला। यह बहुत अच्छी तरह से एक किनारे का मामला हो सकता था commander
- हालाँकि github.com/tj/commander.js/… मुझे आश्चर्यचकित करता है। यकीन नहीं होता अगर किसी और को इस समस्या को देखा है w / नोड 4, लेकिन भविष्य के संदर्भ के लिए सिर्फ मामले में दस्तावेजीकरण।
process.exitCode = 1
, प्रक्रिया कोड 0. के साथ बाहर निकलती है
जैसा कि @Dominic ने बताया, अनकाउंटेड एरर को कॉल करने की प्रक्रिया के बजाय बेहतर अभ्यास करना है । नेट ([कोड]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
बाहर निकलने के लिए
let exitCode = 1;
process.exit(exitCode)
उपयोगी निकास कोड
1 - सामान्य त्रुटियों के लिए कैटचेल 2 - शेल बिल्डरों का दुरुपयोग (बैश प्रलेखन के अनुसार) १२६ - आज्ञा का पालन नहीं किया जा सकता 127 - "कमांड नहीं मिली" 128 - बाहर निकलने के लिए अमान्य तर्क 128 + एन - घातक त्रुटि संकेत "एन" १३० - स्क्रिप्ट नियंत्रण-सी द्वारा समाप्त 255 \ * - सीमा से बाहर की स्थिति
कोड से आप उपयोग कर सकते हैं process.exit([errorcode])
जहां [errorcode]
एक वैकल्पिक पूर्णांक है ( 0
सफलता को इंगित करने के लिए डिफ़ॉल्ट है)।
यदि आप Read Eval Print Loop (REPL) का उपयोग कर रहे हैं , तो आप Ctrl+ D, या प्रकार का उपयोग कर सकते हैं.exit
वैकल्पिक रूप से, विंडोज या लिनक्स पर आप Ctrl+ C, Ctrl+ का उपयोग कर सकते हैंC
मैक पर कमांड Ctrl+ Z, Ctrl+ हैZ
node --version
v0.10.18
Ctrl + C
दो बार दबाएं या .exit
।
>
(To exit, press ^C again or type .exit)
>
मैं अपने सभी नोड प्रक्रियाओं को सीधे विंडोज 10 पर गिट बैश शेल से मरने के लिए प्राप्त करने में सक्षम था taskkill -F -IM node.exe
- यह एक ही बार में मेरे कंप्यूटर पर सभी नोड प्रक्रियाओं को समाप्त करता है। मैंने पाया कि मैं भी इस्तेमाल कर सकता हूं taskkill //F //IM node.exe
। निश्चित नहीं है कि इस संदर्भ में दोनों क्यों -
और कैसे //
काम करते हैं। उम्मीद है की यह मदद करेगा!
जैसा कि प्रक्रिया वैश्विक वस्तु है, आपको किसी भी मॉड्यूल को आयात करने की आवश्यकता नहीं है। निम्न फ़ंक्शन मौजूदा नोड प्रक्रिया को बाहर निकालता है या मारता है।
process.exit (कोड)
process.kill (process.pid)
process.abort ()
कमांड लाइन टर्मिनल खोलें जहां नोड एप्लिकेशन चल रहा है और Ctrl + C दबाएं
यदि आप कोड से नोड js अनुप्रयोग से बाहर निकलना चाहते हैं,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
अगर आप नोड js एप्लिकेशन से बाहर निकलना चाहते हैं तो लिखें
process.exit(1)
आपके कोड में
यदि आप प्रक्रिया को रोकने के लिए निष्पादन लूप को बाध्य करना चाहते हैं, तो यो वैश्विक चर प्रक्रिया का उपयोग कर सकता है, जो EventEmitter का एक उदाहरण है । इसलिए जब आप process.exit () कॉल करते हैं, तो आप वास्तव में बाहर निकलने की घटना का उत्सर्जन करते हैं जो सभी कार्यों को तुरंत समाप्त कर देता है, भले ही अभी भी अतुल्यकालिक संचालन नहीं किया गया हो।
process.exit () पैरामीटर के रूप में एक एक्जिट कोड (पूर्णांक ) लेता है। कोड 0 डिफ़ॉल्ट है और इसका मतलब है कि यह एक 'सफलता' के साथ बाहर निकलता है। जबकि कोड 1 का मतलब है कि यह एक 'विफलता' के साथ बाहर निकलता है।
यदि आप विंडोज में हैं, तो टास्क मैनेजर में जाएं, फिर प्रोसेस पर जाएं, "नोड" नामक एक प्रक्रिया देखें, फिर अपने माउस के दाहिने बटन पर क्लिक करें और फिर "एंड प्रोसेस" विकल्प पर क्लिक करें।
आप process.exit ([कोड]) फ़ंक्शन का उपयोग कर सकते हैं ।
यदि आप 'विफलता' के बिना बाहर निकलना चाहते हैं, तो आप कोड का उपयोग करते हैं 0
:
process.exit(0);
'विफलता' कोड के साथ बाहर निकलने के लिए 1
आप दौड़ सकते हैं:
process.exit(1);
असफलता का 'विफलता' कोड एप्लिकेशन के लिए विशिष्ट है। तो आप इसके लिए अपने स्वयं के सम्मेलनों का उपयोग कर सकते हैं।
end()
अनुरोध भी करना चाहिए । अन्यथा, यह सिर्फ लटका होगा।