قم بإيقاف برنامج node.js من سطر الأوامر

سئل على ٩ مايو ٢٠١٢  ·  تمت مشاهدة 587k مرة  ·  مصدر

Eleeist picture
في ٩ مايو ٢٠١٢

لدي خادم TCP بسيط يستمع إلى منفذ.

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

أبدأه بـ node server.js ثم أغلقه باستخدام Ctrl + Z على Mac. عندما أحاول تشغيله مرة أخرى باستخدام node server.js لي رسالة الخطأ هذه:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

هل أقوم بإغلاق البرنامج بطريقة خاطئة؟ كيف يمكنني منع حدوث ذلك؟

الإجابات

Brad picture
في ٩ مايو ٢٠١٢
403

لإنهاء البرنامج ، يجب أن تستخدم Ctrl + C. إذا قمت بذلك ، فإنه يرسل SIGINT ، والذي يسمح للبرنامج بإنهاء برشاقة ، وفك الارتباط من أي منافذ يستمع إليها.

انظر أيضا: https://superuser.com/a/262948/48624

Jamund Ferguson picture
في ٩ مايو ٢٠١٢
336

يقوم Ctrl + Z بتعليقه ، مما يعني أنه لا يزال من الممكن تشغيله.

سيقتل Ctrl + C في الواقع.

يمكنك أيضًا قتلها يدويًا مثل هذا:

ps aux | grep node

ابحث عن معرف العملية (الثاني من اليسار):

kill -9 PROCESS_ID

قد يعمل هذا أيضًا

killall node
Hamid Tavakoli picture
في ٢٢ سبتمبر ٢٠١٤
37

أو بدلاً من ذلك ، يمكنك القيام بكل ذلك في سطر واحد:

kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')

يمكنك استبدال العقدة الموجودة داخل '\ snode \ s' بأي اسم عملية آخر.

Metagrapher picture
في ٢٦ مايو ٢٠١٧
25

استئناف واقتل العملية:

يقوم Ctrl + Z بتعليقه ، مما يعني أنه لا يزال قيد التشغيل كعملية خلفية معلقة.

من المحتمل أنك الآن في موجه طرفية ...

  1. أعط الأمر fg لاستئناف العملية في المقدمة.

  2. اكتب Ctrl + C لقتله بشكل صحيح.


بدلاً من ذلك ، يمكنك قتلها يدويًا كما يلي:

( ملاحظة: قد تتطلب الأوامر التالية الجذر ، لذلك sudo ... هو صديقك)

pkill -9 node

أو ، إذا لم يكن لديك حبوب ، فقد يعمل هذا:

killall node

أو ربما هذا:

kill $(ps -e | grep node | awk '{print $1}')

في بعض الأحيان ستدرج العملية grep الخاصة بها ، وفي هذه الحالة ستحتاج إلى:

kill $(ps -e | grep dmn | awk '{print $2}')

.


ح / ر @ ruffin من التعليقات على السؤال نفسه. واجهت نفس المشكلة وساعدني تعليقه في حلها بنفسي.

sunny1304 picture
في ٢٢ يوليو ٢٠١٣
22

يمكنك كتابة .exit لإنهاء node js REPL

sr77in picture
في ١٥ فبراير ٢٠١٤
18

إذا كنت تقوم بتشغيل Node.js بشكل تفاعلي (REPL):

سيعيدك Ctrl + C إلى> موجه ثم اكتب:

process.exit()

أو فقط استخدم Ctrl + D.

Maxim Yefremov picture
في ١٨ يونيو ٢٠١٣
17

$ sudo killall node في محطة طرفية أخرى تعمل على نظام Mac ، بينما killall node لا يعمل:

$ killall node
No matching processes belonging to you were found
Jason picture
في ١٨ يوليو ٢٠١٨
13

على نظام التشغيل Linux حاول: pkill node

على النوافذ:

Taskkill /IM node.exe /F

أو

from subprocess import call

call(['taskkill', '/IM', 'node.exe', '/F'])
randominstanceOfLivingThing picture
في ٢٢ سبتمبر ٢٠١٦
6

على الرغم من أن هذه إجابة متأخرة ، فقد وجدت هذا من مستندات NodeJS :

يتم إصدار حدث "الخروج" عند الخروج من REPL إما باستلام الأمر .exit كمدخل ، أو ضغط المستخدم على <ctrl>-C مرتين للإشارة إلى SIGINT ، أو بالضغط على <ctrl>-D إلى إشارة "نهاية" على دفق الإدخال. يتم استدعاء رد نداء المستمع بدون أي وسيطات.

للتلخيص يمكنك الخروج من خلال:

  1. كتابة .exit في nodejs REPL.
  2. الضغط على <ctrl>-C مرتين.
  3. الضغط على <ctrl>-D .
  4. process.exit(0) يعني خروج طبيعي من REPL. إذا كنت تريد إرجاع أي حالة أخرى ، يمكنك إرجاع رقم غير صفري.
  5. process.kill(process.pid) هي طريقة القتل باستخدام nodejs api من داخل الكود الخاص بك أو من REPL.
Decoded picture
في ٨ يوليو ٢٠١٧
5

أقوم بإضافة هذه الإجابة لأنه بالنسبة للعديد من المشاريع التي تحتوي على عمليات نشر الإنتاج ، لدينا نصوص برمجية توقف هذه العمليات حتى لا نضطر إلى ذلك.

هناك طريقة نظيفة لإدارة عمليات Node Server وهي استخدام الحزمة forever (من NPM ).

مثال:

تثبيت للأبد

npm install forever -g

تشغيل خادم العقدة

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

نتيجة:

info: Forever processing file: server.js

إيقاف تشغيل خادم العقدة

forever stop server.js

نتيجة

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247

سيؤدي هذا إلى إيقاف تشغيل تطبيق الخادم الخاص بك.