প্রস্থান করার জন্য ব্যবহৃত হুকুমটি কী? (যেমন নোড.জেএস প্রক্রিয়া শেষ করুন)
প্রস্থান করার জন্য ব্যবহৃত হুকুমটি কী? (যেমন নোড.জেএস প্রক্রিয়া শেষ করুন)
উত্তর:
গ্লোবাল process
অবজেক্টের exit
পদ্ধতিটি কল করুন :
process.exit()
process.exit ([কোড])
নির্দিষ্ট সঙ্গে প্রক্রিয়া শেষ
code
। বাদ দেওয়া থাকলে প্রস্থান 'সাফল্য' কোডটি ব্যবহার করে0
।একটি 'ব্যর্থতা' কোড সহ প্রস্থান করতে:
process.exit(1);
নোড চালানো শেলটি প্রস্থান কোড হিসাবে দেখা উচিত
1
।
exit
মোটেই বিভ্রান্তিকর নয়। নোড কীভাবে কাজ করে সে সম্পর্কে আপনি বিভ্রান্ত। নোডকে সার্ভার হিসাবেই ভাবেন। এটি যেমন প্রয়োজন ঠিক তেমন আপ হয় নি যেমন পিএইচপি অ্যাপাচি-এর মতো একটি ওয়েব সার্ভারের মধ্যে রয়েছে। এমনকি ওয়েব সার্ভারগুলির সাথে নোডের কিছু করার দরকার নেই! এটি কিছু জাভাস্ক্রিপ্টের জন্য কেবল একটি হোস্ট, দরকারী জিনিসগুলি করার জন্য কিছু নিফটি বিল্ট-ইন লাইব্রেরি সহ।
mod_php
অ্যাপাচি দিয়ে চালানোর বা ব্যবহার করার দরকার নেই । আপনি পিএইচপি-তে কোনও এইচডিডি পুনরায় প্রতিস্থাপন করতে পারেন নোডের মতো আপনি যদি সত্যিই চান বা দ্রুতগতিতে যেমন নোডে করতে পারেন তেমন আরও বুদ্ধিমান / মানক পদ্ধতি ব্যবহার করেন।
process.exit()
হয় বাঞ্ছনীয় নয় , বর্ণনা অনুযায়ী নিচের এই উত্তর ।
শুধু একটি নোট যে ব্যবহার অনুশীলন সুপারিশ করা process.exit([number])
হয় না ।
প্রসেস.এক্সিট () কল করা প্রক্রিয়াটিকে যত দ্রুত সম্ভব প্রস্থান করতে বাধ্য করবে এমনকি যদি এখনও অ্যাসিক্রোনাস অপারেশনগুলি এখনও পুরোপুরি সম্পন্ন না হয়ে থাকে তবে প্রসেস.স্টডআউট এবং প্রসেস.স্টার্ডার সহ পুরোপুরি শেষ হয়নি।
বেশিরভাগ পরিস্থিতিতে, প্রসেস.এক্সিট () কে স্পষ্টভাবে কল করা প্রয়োজন হয় না। ইভেন্ট লুপে কোনও অতিরিক্ত কাজ মুলতুবি না থাকলে নোড.জেএস প্রক্রিয়াটি নিজে থেকে প্রস্থান করবে। প্রসেস.এক্সিটকোড বৈশিষ্ট্যটি প্রসেসটি সুক্ষভাবে প্রস্থান করা হলে কোন প্রস্থান কোডটি ব্যবহার করবেন তা প্রক্রিয়াটি জানাতে সেট করা যেতে পারে।
উদাহরণস্বরূপ, নিম্নলিখিত উদাহরণটি প্রসেস.এক্সিট () পদ্ধতির অপব্যবহারের চিত্রিত করে যা স্টাডআউটে মুদ্রিত ডেটা কাটা এবং হারাতে পারে:
// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
এটি সমস্যাযুক্ত হওয়ার কারণ হ'ল নোড.জেএস-এ প্রসেস.স্টটআউটে লেখার সময় কখনও কখনও অ্যাসিনক্রোনাস হয় এবং নোড.জেএস ইভেন্ট লুপের একাধিক টিকের উপরেও এটি হতে পারে। কলিং প্রসেস.এক্সিট () তবে স্টাডাউটে অতিরিক্ত অতিরিক্ত লেখার আগে প্রক্রিয়াটি প্রস্থান করতে বাধ্য করে।
প্রসেস.এক্সিট () কে সরাসরি কল করার পরিবর্তে কোডটি প্রসেস.এক্সিটকোড সেট করে এবং ইভেন্ট লুপের জন্য কোনও অতিরিক্ত কাজের সময়সূচী এড়িয়ে প্রক্রিয়াটিকে প্রাকৃতিকভাবে প্রস্থান করার অনুমতি দেয়:
// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()
জন্য উদ্দীষ্ট।
সরকারী nodejs.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
এবং এন্টার টিপুন, বাnode
REPL, প্রস্থান Ctrl + D: একটি প্রমিত আচরণ, তাই এটি আরো Windows এ কাজ করে।
কমান্ড লাইন থেকে, .exit
আপনি যা চান:
$ node
> .exit
$
এটি আরপিএল ডক্সে নথিযুক্ত । REPL (রিড-ইভাল-প্রিন্ট-লুপ) হ'ল নোড কমান্ড লাইনকে।
একটি সাধারণ প্রোগ্রাম থেকে, ব্যবহার করুন process.exit([code])
।
এটা তোলে কারণে আপনি প্রস্থান Node.js প্রক্রিয়া সম্মত হন উপর নির্ভর করে, কিন্তু কোনো ক্ষেত্রে process.exit()
হয় বিবেচনা সর্বশেষ অপশনটি । ডকুমেন্টেশন থেকে একটি উদ্ধৃতি:
এটি লক্ষণীয় গুরুত্বপূর্ণ যে কলিং
process.exit()
প্রক্রিয়াটি যত তাড়াতাড়ি সম্ভব প্রস্থান করতে বাধ্য করবে এমনকি যদি এখনও অ্যাসিক্রোনাস অপারেশনগুলি এখনও সম্পূর্ণরূপে সম্পন্ন হয় নি, এমনকি I / O ক্রিয়াকলাপprocess.stdout
এবং এর সাথে সম্পূর্ণভাবে সম্পন্ন হয়নিprocess.stderr
।বেশিরভাগ পরিস্থিতিতে,
process.exit()
স্পষ্টভাবে কল করা প্রয়োজন হয় না is ইভেন্ট লুপে কোনও অতিরিক্ত কাজ মুলতুবি না থাকলে নোড.জেএস প্রক্রিয়াটি নিজে থেকে প্রস্থান করবে।process.exitCode
সম্পত্তি প্রক্রিয়া যার প্রস্থান কোড যখন প্রণালী থেকে প্রস্থান করা অত্যন্ত শৃঙ্খলার ব্যবহার করতে বলতে নির্ধারণ করা যাবে।
আপনি নোড.জেএস প্রক্রিয়া থেকে বেরিয়ে আসতে ইচ্ছুক হতে পারেন এবং কেন আপনার এড়ানো উচিত সে সম্ভাব্য কারণগুলি কভার করুন process.exit()
:
স্ক্রিপ্টটি যদি শেষের দিকে পৌঁছে যায় এবং নোড ইন্টারপ্রেটারটি প্রস্থান না করে, এটি নির্দেশ করে যে কিছু অ্যাসিঙ্ক অপারেশন এখনও মুলতুবি রয়েছে। process.exit()
এই সময়ে প্রক্রিয়া সমাপ্তি জোর করা ভুল । প্রত্যাশিত উপায়ে বেরিয়ে আসা থেকে আপনার স্ক্রিপ্টটি কী রয়েছে তা বোঝার চেষ্টা করা ভাল । এবং আপনি এটি নিষ্পত্তি করার সময়, আপনি ব্যবহার করতে পারেনprocess.exitCode
কল করার প্রক্রিয়াতে কোনও ফলাফল ফেরত করতে পারেন।
উদাহরণস্বরূপ, যদি আপনি দয়া করে কোনও এক্সপ্রেস অ্যাপ বন্ধ করতে চান । কমান্ড লাইন স্ক্রিপ্টের বিপরীতে, এক্সপ্রেস অ্যাপটি নতুন অনুরোধগুলির জন্য অপেক্ষা করে, অসীমভাবে চলতে থাকে keeps 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 দেখুন।
এটি throw
একটি ত্রুটি থেকে সর্বদা ভাল , আপনি একটি দুর্দান্ত বিন্যাসযুক্ত স্ট্যাক ট্রেস এবং ত্রুটি বার্তা পাবেন। উচ্চ স্তরের কোড সর্বদা সিদ্ধান্ত নিতে পারে যে তারা ত্রুটি ( catch
) পরিচালনা করতে পারে বা এটি প্রক্রিয়াটি ক্র্যাশ করতে দেয়। অন্যদিকে, process.exit(1)
নীরবে প্রক্রিয়া শেষ করবে এবং এ থেকে পুনরুদ্ধারের কোনও সুযোগ থাকবে না। এটি কেবলমাত্র "উপকার" হতে পারে process.exit()
, আপনি নিশ্চিত হতে পারেন যে প্রক্রিয়াটি সমাপ্ত হবে।
Process.exit()
বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য বড় ওভারকিলের মতো দেখাচ্ছে। আমি পিএইচপি'র ডাই () ফাংশনের সমতুল্য সন্ধান করছিলাম ... আরও মত:throw new Error('die msg')
REPL (কমান্ড লাইন)
দুবার টিপুনctrl + c
লিখুন .exit
এবং এন্টার টিপুন
স্ক্রিপ্ট ফাইল
process.exit(code)
নোড সাধারণত কোড 0 দিয়ে প্রস্থান করে যখন অ্যাসিঙ্ক অপারেশনগুলি আর মুলতুবি থাকে।
process.exit(1)
একটি ব্যর্থতা কোড সহ প্রস্থান করার জন্য ব্যবহার করা উচিত his এটি আমাদের অনুমান করতে দেয় যে নোড সুদৃশ্যভাবে বন্ধ হয়নি এবং বন্ধ করতে বাধ্য হয়েছিল।
অন্যান্য প্রস্থান কোড আছে
3 - অভ্যন্তরীণ জাভাস্ক্রিপ্ট পার্স ত্রুটি (খুব বিরল)
5 - ভি 8 জাভাস্ক্রিপ্ট ইঞ্জিনে মারাত্মক ত্রুটি
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
কমান্ড-লাইন সরঞ্জামটি তৈরি করছি তার জন্য আমার জন্য কাজ করার চেষ্টা করার জন্য দিনের বেশিরভাগ অংশ ব্যয় করেছি (নোড ভি ৪.৩.০-তে পরীক্ষিত)। তবে আমি এটি দলিল হিসাবে আচরণ করতে পারি না। এটি খুব ভাল একটি প্রান্ত ক্ষেত্রে হতে পারে commander
- যদিও github.com/tj/commander.js/… আমাকে অবাক করে তোলে। নিশ্চিত নয় যে অন্য কেউ এই সমস্যাটি ডাব্লু / নোড 4 দেখেছেন তবে ভবিষ্যতের রেফারেন্সের ক্ষেত্রে কেবল নথিভুক্ত করছেন।
process.exitCode = 1
করে
@Dominic হিসাবে নির্দিষ্ট, একটি uncaught ত্রুটি নিক্ষেপ পরিবর্তে কলিং ভাল অভ্যাস process.exit ([কোড]) :
process.exitCode = 1;
throw new Error("my module xx condition failed");
প্রস্থান করা
let exitCode = 1;
process.exit(exitCode)
কার্যকর প্রস্থান কোড
1 - সাধারণ ত্রুটির জন্য ক্যাচল 2 - শেল বিল্টিনগুলির অপব্যবহার (বাশ ডকুমেন্টেশন অনুসারে) 126 - অনুরোধ করা কমান্ড কার্যকর করতে পারে না 127 - "আদেশ পাওয়া যায় নি" 128 - প্রস্থান করার জন্য অবৈধ যুক্তি 128 + এন - মারাত্মক ত্রুটি সংকেত "এন" 130 - স্ক্রিপ্ট নিয়ন্ত্রণ-সি দ্বারা সমাপ্ত 255 \ * - প্রস্থান ছাড়ার স্থিতি
কোড থেকে আপনি process.exit([errorcode])
যেখানে [errorcode]
optionচ্ছিক পূর্ণসংখ্যা ব্যবহার করতে পারেন ( 0
সাফল্য নির্দেশ করার জন্য এটি ডিফল্ট)।
আপনি যদি রিড এভাল প্রিন্ট লুপ (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 টিপুন
আপনি যদি কোড থেকে নোড জেএস অ্যাপ্লিকেশনটি প্রস্থান করতে চান,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
আপনি যদি নোড জেএস অ্যাপ্লিকেশন থেকে প্রস্থান করতে চান তবে লিখুন
process.exit(1)
আপনার কোডে
আপনি যদি প্রক্রিয়াটি থামানোর জন্য এক্সিকিউশন লুপটিকে জোর করতে চান তবে আপনি বিশ্বব্যাপী পরিবর্তনশীল প্রক্রিয়াটি ব্যবহার করতে পারেন যা ইভেন্টইমিটারের উদাহরণ । সুতরাং আপনি যখন প্রসেস.এক্সিট () কল করেন তখন আপনি বাস্তবে প্রস্থান ইভেন্টটি নির্গত করেন যা সমস্ত কাজ তত্ক্ষণাত শেষ করে এমনকি যদি এখনও অ্যাসিনক্রোনাস অপারেশন না করা হয়।
প্রসেস.এক্সিট () একটি পরামিতি হিসাবে একটি প্রস্থান কোড (পূর্ণসংখ্যা ) নেয়। কোড 0 ডিফল্ট এবং এর অর্থ এটি একটি 'সাফল্য' দিয়ে প্রস্থান করে। যদিও কোড 1 এর অর্থ এটি একটি 'ব্যর্থতা' দিয়ে প্রস্থান করুন।
যদি আপনি উইন্ডোজটিতে থাকেন তবে টাস্ক ম্যানেজারে যান, তারপরে প্রক্রিয়াগুলিতে যান, "নোড" নামে একটি প্রক্রিয়া সন্ধান করুন, তারপরে আপনার মাউসের ডান বোতামটি দিয়ে এটিতে ক্লিক করুন এবং তারপরে "শেষ প্রক্রিয়া" বিকল্পটি ক্লিক করুন।
আপনি process.exit ([কোড]) ফাংশন ব্যবহার করতে পারেন ।
আপনি যদি 'ব্যর্থতা' ছাড়াই প্রস্থান করতে চান তবে আপনি কোডটি ব্যবহার করুন 0
:
process.exit(0);
একটি 'ব্যর্থতা' কোড সহ প্রস্থান 1
করতে আপনি চালাতে পারেন:
process.exit(1);
ব্যর্থতার 'ব্যর্থতা' কোডটি অ্যাপ্লিকেশনের সাথে নির্দিষ্ট। সুতরাং আপনি এটির জন্য আপনার নিজস্ব সম্মেলনগুলি ব্যবহার করতে পারেন।
end()
। অন্যথায়, এটি কেবল স্তব্ধ হয়ে যাবে।