หยุดอินสแตนซ์ทั้งหมดของเซิร์ฟเวอร์ node.js


186

นี่เป็นครั้งแรกที่ฉันทำงานกับ Node.js และฉันพบปัญหานี้:

ฉันเริ่มเซิร์ฟเวอร์ Node ผ่านทางปลั๊กอินของ IDE น่าเสียดายที่ฉันไม่สามารถใช้เทอร์มินัลของ IDE ดังนั้นฉันจึงพยายามเรียกใช้สคริปต์จากบรรทัดคำสั่ง

นี่คือปัญหา - ฉันใช้โมดูล Express และแอพของฉันกำลังฟังพอร์ตบางส่วน (8080) เมื่อฉันเริ่มต้นแอพจากบรรทัดคำสั่งมันจะพ่นข้อผิดพลาดนี้:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

แม้ว่าฉันไม่แน่ใจว่าข้อผิดพลาดนี้อาจเป็นสิ่งที่ฉันคิดว่าเป็นเพราะแอปกำลังฟังพอร์ตที่ใช้งานอยู่ ดังนั้นฉันจึง:

netstat -an

ฉันเห็น

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

เป็นเพราะเซิร์ฟเวอร์โหนดเริ่มต้นขึ้นแล้วเมื่อฉันพยายามเริ่มต้นจาก IDE

ดังนั้นฉันอยากรู้ว่าฉันจะหยุดอินสแตนซ์ของเซิร์ฟเวอร์ทั้งหมดได้อย่างไร นอกจากนี้หากคุณสามารถบอกวิธีการตรวจสอบสิ่งที่ทำงานบนพอร์ตและฆ่ามัน


1
ขอโทษฉันพูดถึงว่าฉันอยู่ในสภาพแวดล้อมที่หน้าต่าง กรุณาโพสต์คำสั่งที่เกี่ยวข้อง ขอบคุณ
Kiran Ambati

และคุณยังสามารถค้นหางาน node.js ใน windows taskmanager ของคุณ ค้นหาความคืบหน้าซึ่งชื่อคือ Node.js: ฝั่งเซิร์ฟเวอร์ ... และเปิดเป็นข้อมูลรายละเอียดคุณจะพบ pid และรายละเอียดของความคืบหน้า nodejs ของคุณ
Xiuying Lan

นี่คืออันที่ทำงานสำหรับฉัน: superuser.com/questions/1183057/…
ทราบ

คำตอบ:


422

เครื่อง Windows:

จำเป็นที่จะต้องฆ่าเซิร์ฟเวอร์ Node.js และคุณไม่ได้มีกระบวนการ Node อื่น ๆ node.exeทำงานคุณสามารถบอกได้ว่าเครื่องของคุณจะฆ่าทุกขั้นตอนการตั้งชื่อ ที่จะมีลักษณะเช่นนี้:

taskkill /im node.exe

และหากกระบวนการยังคงอยู่คุณสามารถบังคับให้กระบวนการยุติโดยการเพิ่มการ/fตั้งค่าสถานะ:

taskkill /f /im node.exe

หากคุณต้องการการควบคุมที่ละเอียดยิ่งขึ้นและต้องการฆ่าเซิร์ฟเวอร์ที่รันบนพอร์ตเฉพาะเท่านั้นคุณสามารถใช้netstatเพื่อค้นหา ID กระบวนการจากนั้นส่งสัญญาณ kill ไปที่มัน ดังนั้นในกรณีของคุณที่พอร์ตคือ8080คุณสามารถเรียกใช้ต่อไปนี้:

C:\>netstat -ano | find "LISTENING" | find "8080"

คอลัมน์ที่ห้าของผลลัพธ์คือ ID กระบวนการ:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

taskkill /pid 14828จากนั้นคุณสามารถฆ่ากระบวนการที่มี หากกระบวนการปฏิเสธที่จะออกจากนั้นเพียงแค่เพิ่ม/fพารามิเตอร์ (แรง) ลงในคำสั่ง


เครื่อง Linux:

กระบวนการเกือบจะเหมือนกัน คุณสามารถฆ่ากระบวนการ Node ทั้งหมดที่ทำงานบนเครื่อง (ใช้-$SIGNALหากSIGKILLไม่เพียงพอ):

killall node

หรือใช้netstatคุณสามารถค้นหา PID ของกระบวนการฟังบนพอร์ต:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

ID กระบวนการในกรณีนี้คือหมายเลขหน้าชื่อกระบวนการในคอลัมน์ที่หกซึ่งคุณสามารถส่งผ่านไปยังkillคำสั่ง:

$ kill 1073

หากกระบวนการปฏิเสธที่จะออกจากนั้นให้ใช้-9แฟล็กซึ่งเป็นSIGTERMและไม่สามารถข้ามได้:

$ kill -9 1073

1
ขออภัยฉันสามารถใช้คำสั่งเหล่านี้ได้อย่างไร process.exit () อาจอยู่ในรหัส? แต่เซิร์ฟเวอร์เริ่มต้นแล้ว เป็นไปได้ว่ามันเริ่มต้นด้วยคำสั่ง node app.js แต่ไม่ใช่ node-dev app.js และ "node killall" ไม่ทำงาน ฉันทำผิดหรือเปล่า? ขอขอบคุณ
Kiran Ambati

1
process.exit()ในแอปพลิเคชันของคุณทำให้อินสแตนซ์ NodeJS ปิด killall nodeใน bash จะฆ่าอินสแตนซ์ NodeJS ทั้งหมดที่ทำงานบนเครื่องของคุณ
hexacyanide

ขอบคุณ @ hexacyanide ฉันกำลังพัฒนาบน windows นั่นทำให้โหนด killall เป็นคำสั่งที่ไม่ถูกต้องหรือไม่เพราะฉันไม่สามารถใช้งานได้จากบรรทัดคำสั่ง
Kiran Ambati

3
ลองtaskkill /IM node.exeดู node.exeมันจะฆ่าทุกขั้นตอนการตั้งชื่อ
hexacyanide

1
ฉันต้องใช้ taskkill / F / IM node.exe เพื่อให้ทำงานได้ขอบคุณ!
Luis

75

วิธีที่เร็วที่สุดคือ

killall node

ทำงานร่วมกับ Linux, OS X


วิธีง่าย ๆ แต่ถ้ามีแอปพลิเคชันอื่นทำงานอยู่เราจะต้องเจาะจงมากขึ้น
Rajeev Uppala

ไม่ได้ผลสำหรับฉัน node: no process foundนอกจากนี้เมื่อฉัน grep สำหรับกระบวนการโหนดที่ทำงานบนพอร์ตเฉพาะ ID กระบวนการมี-แทนตัวเลขตัวเอง
Giorgi Gvimradze

49

คุณสามารถใช้lsofรับกระบวนการที่เชื่อมโยงกับพอร์ตที่ต้องการ

น่าเสียดายที่ค่าสถานะดูเหมือนจะแตกต่างกันไปขึ้นอยู่กับระบบ แต่สำหรับ Mac OS X คุณสามารถเรียกใช้ได้

lsof -Pi | grep LISTEN

ตัวอย่างเช่นในเครื่องของฉันฉันได้รับสิ่งที่ชอบ:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

ตัวเลขที่สองคือ PID และพอร์ตที่พวกเขาฟังอยู่ทางด้านขวาก่อน "(LISTEN)" ค้นหา PID อันธพาลและkill -9 $PIDยุติด้วยอคติที่รุนแรง


สวัสดีจาค็อบคุณสามารถแก้ไขคำตอบและเพิ่มรุ่น windows ได้เพราะฉันกำลังพัฒนาบน windows ขอขอบคุณ
Kiran Ambati

ฉันไม่รู้ว่าจะทำอย่างไรกับ Windows ขอโทษ Kiran
Jacob Groundwater

นี่เป็นคำตอบที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งเมื่อมีเซิร์ฟเวอร์หลายโหนดทำงานบนพอร์ตที่แตกต่างกัน ฉันสามารถแยกความแตกต่างของกระบวนการ ID ที่ทำงานอยู่ในแต่ละพอร์ตได้อย่างง่ายดาย
modulitos

25

เทอร์มินัล Windows & GitBash ฉันต้องการใช้คำสั่งนี้ภายในเทอร์มินัล Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
อันนี้ทำเพื่อฉัน ขอบคุณ
Adim Victor

1
อันนี้ก็ทำเพื่อฉันเช่นกัน ฉันพบวิธีที่เร็วที่สุดในการฆ่ากระบวนการโหนดทั้งหมดบน Windows
ซาด

17

ถ้าคุณต้องการที่จะฆ่ากระบวนการโหนดที่เฉพาะเจาะจงคุณสามารถไปที่เส้นทางบรรทัดคำสั่งและประเภท:

ps aux | grep node

เพื่อรับรายการ ID กระบวนการของโหนดทั้งหมด ตอนนี้คุณสามารถรับรหัสกระบวนการของคุณ (pid) จากนั้นทำ:

kill -9 PID

และถ้าคุณต้องการที่จะฆ่ากระบวนการโหนดทั้งหมดทำ:

killall -9 node

-9 สวิตช์เป็นเหมือนงานสิ้นสุดบน windows มันจะบังคับให้กระบวนการจบ คุณทำได้:

kill -l

เพื่อดูสวิตช์ทั้งหมดของคำสั่ง kill และความคิดเห็น


8

คุณสามารถลองสิ่งนี้:

taskkill /IM node.exe -F

7

ลินุกซ์

เพื่อสร้างความประทับใจให้เพื่อนของคุณ

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

แต่นี่คือสิ่งที่คุณจะจดจำ

killall node


2

หากคุณใช้ Windows ให้ปฏิบัติดังนี้:

  1. เปิดตัวจัดการงานค้นหากระบวนการนี้: ตัวจัดการงานแสดงกระบวนการโหนด - Node.js JavaScript ฝั่งเซิร์ฟเวอร์

  2. จากนั้นคลิกขวาและ "จบงาน"

  3. เพียงเท่านี้ตอนนี้คำสั่ง npm ทั้งหมดจะเรียกใช้จากจุดเริ่มต้น


1

หลากหลายแพลตฟอร์มเสถียรทางออกที่ดีที่สุด:

ใช้fkillเพื่อฆ่ากระบวนการที่ใช้พอร์ตของคุณ:

fkill -f :8080

ในการติดตั้งคำสั่ง fkill ให้ใช้: npm i -g fkill


1

คุณสามารถลอง

killall node

คุณสามารถลอง

killall nodejs

คำสั่งเหล่านี้มีการโพสต์แล้วหลายครั้ง มันก็โอเคที่จะโพสต์พวกเขาอีกครั้ง แต่อย่างน้อยคุณควรเพิ่มคำอธิบายเพิ่มเติมให้กับคำตอบของคุณเพื่อให้คนอื่นสามารถเรียนรู้จากมันได้
Nico Haase


0

กำลังใช้ระบบปฏิบัติการ windows

ฉันฆ่ากระบวนการโหนดทั้งหมดและรีสตาร์ทแอปที่ใช้งานได้

ลอง

taskkill /im node.exe

0

ใช้คำสั่งต่อไปนี้เพื่อฆ่าและรีสตาร์ทเซิร์ฟเวอร์โหนดจากแบตช์ไฟล์

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

กดเป็น cmd หรือ bash: Ctrl + C


สิ่งนี้ใช้ได้ในมุมมองเทอร์มินัลเมื่อกระบวนการของโหนดทำงานและไม่รับประกันว่าจะฆ่ากระบวนการ
ออกแบบโดย Adrian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.