วิธีแก้ไขข้อผิดพลาด: ฟัง EADDRINUSE ขณะใช้งาน nodejs?


466

หากฉันใช้เซิร์ฟเวอร์ที่มีพอร์ต 80 และฉันพยายามใช้xmlHTTP คำถามฉันได้รับข้อผิดพลาดนี้:Error: listen EADDRINUSE

ทำไมมันเป็นปัญหาสำหรับ nodejs ถ้าฉันต้องการที่จะทำคำขอในขณะที่ฉันเรียกใช้เซิร์ฟเวอร์บนพอร์ต 80? สำหรับเว็บเบราว์เซอร์นั้นไม่ใช่ปัญหา: ฉันสามารถท่องอินเทอร์เน็ตได้ในขณะที่เซิร์ฟเวอร์กำลังทำงาน

เซิร์ฟเวอร์คือ:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

และคำขอ:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();

คุณแน่ใจหรือว่า options.port ถูกกำหนดเป็น 80 รหัส XHR ทำงานอยู่ในเบราว์เซอร์หรือไม่? คุณสามารถเรียกใช้ "nc -l 0.0.0.0 80" เมื่อเซิร์ฟเวอร์นี้ไม่ทำงานหรือไม่
ทิโมธีมี้ด

ดูปัญหาที่คล้ายกันได้ที่ stackoverflow.com/questions/8553957/…
Manohar Reddy Poreddy

คุณใช้ระบบใดอยู่ ระบบบางระบบต้องการ sudo หากคุณต้องการฟังพอร์ตด้านล่าง treshold
Kebman

ปัญหานี้เกิดขึ้นเนื่องจากคุณรันเซิร์ฟเวอร์ของคุณบนพอร์ตนั้นและคุณไม่ได้ปิดพอร์ตนั้นข้อผิดพลาดอย่างชัดเจนบอกว่าพอร์ตที่ใช้งานอยู่สิ่งนี้เกิดขึ้นสำหรับฉันคือเมื่อฉันเปิดโครงการใหม่ในรหัส vs โดยไม่ปิดโครงการอื่น ๆ โดยการลากและวาง)
Ashad Nasim

คำตอบ:


412

EADDRINUSEหมายความว่าหมายเลขพอร์ตที่listen()พยายามผูกเซิร์ฟเวอร์ที่ใช้งานอยู่

ดังนั้นในกรณีของคุณจะต้องใช้เซิร์ฟเวอร์บนพอร์ต 80 แล้ว

หากคุณมีเว็บเซิร์ฟเวอร์อื่นที่ใช้งานพอร์ตนี้คุณจะต้องวาง node.js ไว้ข้างหลังเซิร์ฟเวอร์และใช้พร็อกซีผ่านมัน

คุณควรตรวจสอบlisteningเหตุการณ์เช่นนี้เพื่อดูว่าเซิร์ฟเวอร์ฟังอยู่หรือไม่:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);

1
ฉันใช้เซิร์ฟเวอร์นี้เท่านั้น ก่อนที่ฉันจะเริ่มเซิร์ฟเวอร์ xmlhttprequest ก็ใช้ได้ หลังจากฉันเริ่มเซิร์ฟเวอร์บนพอร์ต 80 แล้วเซิร์ฟเวอร์ก็ทำงานได้อย่างสมบูรณ์ แต่ถ้าฉันทำ xmlhttprequest หลังจากที่ฉันเริ่มเซิร์ฟเวอร์ฉันก็จะได้รับข้อผิดพลาดนี้
Danny Fox

6
นี่จะไม่เกิดข้อผิดพลาดหากเซิร์ฟเวอร์กำลังฟังอยู่หรือไม่
trysis

1
สำหรับฉันสิ่งนี้เกิดจาก Skype
Beep

559

สิ่งที่ช่วยฉันได้จริงๆคือ:

killall -9 node

แต่นี่จะเป็นการฆ่ากระบวนการของระบบ

กับ

ps ax

คุณสามารถตรวจสอบว่ามันทำงาน


1
สำหรับฉันด้วย ในกรณีของฉันฉันเพียงแค่เรียกใช้ฟังก์ชั่นฟังสองครั้งและได้รับข้อผิดพลาดในครั้งที่สอง
vabada

2
ในบันทึกที่เกี่ยวข้องนอกจากนี้คุณยังอาจจะอ่านเมื่อฉันไม่ควร kil -9 กระบวนการ
โนบิตะ

12
ปัญหานี่คือพวกคุณไม่ได้ออกจากกระบวนการโหนดอย่างสง่างามหลังจากการเรียกใช้ครั้งแรก ดังนั้นโหนดยังคงเชื่อมโยงกับพอร์ตนั้น ps aux | grep nodeจะแสดงว่า แทนที่จะฆ่าแอพลิเคชันที่มีCTRL + Z , ออกจากโปรแกรมที่มีCTRL + C ออกจากแอปพลิเคชันนี้อย่างเรียบร้อยและการเชื่อมพอร์ตจะถูกลบ
riser101

22
คะแนนโหวตมากกว่า 150 คะแนนสำหรับโซลูชันที่เท่ากับตีซอฟต์แวร์ของคุณด้วยตะลุมพุก
LeeGee

1
การแก้ปัญหานี้ค่อนข้างมีปัญหาเนื่องจากแฟล็ก -9 จะฆ่ากระบวนการโดยไม่ปล่อยหน่วยความจำ คุณควรใช้สิ่งนี้เป็นทางออกสุดท้ายเท่านั้น
Yaki Klein

279

ดังที่killall -9 nodePatrick แนะนำไว้ทำงานตามที่คาดไว้และแก้ไขปัญหา แต่คุณอาจต้องการอ่านส่วนแก้ไขของคำตอบที่ดีมากเกี่ยวกับสาเหตุที่kill -9อาจไม่ใช่วิธีที่ดีที่สุด

นอกเหนือจากนั้นคุณอาจต้องการกำหนดเป้าหมายกระบวนการเดียวแทนที่จะฆ่ากระบวนการที่ใช้งานอยู่ทั้งหมดแบบสุ่มสี่สุ่มห้า

ในกรณีนั้นอันดับแรกรับ ID กระบวนการ (PID) ของกระบวนการที่ทำงานบนพอร์ตนั้น (กล่าวว่า 8888):

lsof -i tcp:8888

สิ่งนี้จะส่งคืนสิ่งที่ชอบ:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1 (LISTEN)

จากนั้นก็ทำ (ps - ทำไม่ได้จริงโปรดอ่านด้านล่าง):

kill -9 57385

คุณสามารถอ่านอีกเล็กน้อยเกี่ยวกับเรื่องนี้ที่นี่

แก้ไข:ผมอ่านในหัวข้อที่เกี่ยวข้องอย่างเป็นธรรมในวันนี้และสะดุดเข้ากับหัวข้อที่น่าสนใจเกี่ยวกับเรื่องนี้ว่าทำไมฉันไม่ควรkill -9กระบวนการ

โดยทั่วไปคุณควรใช้kill -15ก่อนkill -9เพื่อให้กระบวนการเป้าหมายมีโอกาสล้างตัวเอง (กระบวนการไม่สามารถตรวจจับหรือเพิกเฉย SIGKILL ได้ แต่สามารถทำได้และมักจะตรวจจับ SIGTERM) หากคุณไม่ให้โอกาสในการดำเนินการจนเสร็จสิ้นสิ่งที่ทำและทำความสะอาดกระบวนการอาจทำให้ไฟล์เสียหาย (หรือสถานะอื่น) ว่าจะไม่สามารถเข้าใจได้เมื่อรีสตาร์ทแล้ว

ดังนั้นตามที่ระบุไว้คุณควรที่จะฆ่ากระบวนการข้างต้นด้วย:

kill -15 57385

แก้ไข 2 : ตามที่ระบุไว้ในความคิดเห็นที่นี่หลายครั้งข้อผิดพลาดนี้เป็นผลมาจากการไม่ออกจากกระบวนการอย่างสง่างาม นั่นหมายความว่าผู้คนจำนวนมากออกจากคำสั่งโหนด (หรืออื่น ๆ ) โดยใช้CTRL + Z วิธีที่ถูกต้องในการหยุดกระบวนการที่กำลังทำงานอยู่คือการออกคำสั่งCTRL + Cซึ่งดำเนินการออกใหม่ทั้งหมด

การออกจากกระบวนการทางที่ถูกต้องจะทำให้พอร์ตนั้นว่างขณะปิดเครื่อง สิ่งนี้จะช่วยให้คุณเริ่มต้นกระบวนการใหม่โดยไม่ต้องผ่านปัญหาในการฆ่าตัวตายก่อนที่จะสามารถเรียกใช้อีกครั้ง


ฉันควรใช้คำสั่งนี้ที่ไหน บนพรอมต์คำสั่ง? บนคอนโซล NPM?
Ulysses Alves

@ UlyssesAlves เพียงเปิดหน้าต่างเทอร์มินัลและฆ่ากระบวนการจากที่นั่น
โนบิตะ

@Nobita ใช้ได้กับ Windows หรือไม่ ตอนนี้ฉันรู้ว่ามันอาจเป็นคำสั่ง MAC OS อย่างไรก็ตามฉันรีสตาร์ทพีซีและไม่ได้รับข้อผิดพลาดนี้อีก ฉันคิดว่ามีบางแอปพลิเคชันอื่นกำลังใช้พอร์ตพอร์ตเดียวกันที่พยายามใช้
Ulysses Alves

2
pgrep nodeแสดงให้เห็นว่ากระบวนการโหนดใดรันบนคุณ pkill nodeจะฆ่าพวกมัน
Josh.F

3
ไม่ได้สำหรับ windows คน - คุณต้องลองพอร์ตอื่นหรือรีบูตเครื่องคอมพิวเตอร์: P
Tom Stickel

62

เพิ่งจะเริ่มต้น Skype จะฟังบนพอร์ต 80 และทำให้เกิดข้อผิดพลาดนี้หากคุณพยายามฟังบนพอร์ต 80 จาก Node.js หรือแอปอื่น ๆ

คุณสามารถปิดพฤติกรรมดังกล่าวใน Skype ได้โดยเข้าถึงตัวเลือกและคลิกขั้นสูง -> การเชื่อมต่อ -> ใช้พอร์ต 80 (ยกเลิกการเลือกนี้)

ปิดการใช้งาน Skype 80 พอร์ต

PS หลังจากทำการเปลี่ยนแปลงนั้นอย่าลืมรีสตาร์ท Skype!


14
PS หลังจากทำการเปลี่ยนแปลงนั้นอย่าลืมรีสตาร์ท Skype!
Rob Evans

16
นี่เป็นหนึ่งในข้อบกพร่องการออกแบบที่สะดุดตาที่สุดที่ฉันเคยเห็น วิธีบ้าเป็น Skype devs ว่าพวกเขาจะเคยพิจารณาการกว่า 80 หรือ 443?
AJB

5
ใหญ่ +1 สำหรับทักษะการดีบั๊กของคุณ Rob
AJB

@AJB พวกเขาลองและเจาะผ่านไฟร์วอลล์ที่ จำกัด ทราฟฟิกขาออกไปยังคำขอ HTTP แต่ที่ไฟร์วอลล์ไม่ได้ใช้ DPI ดังนั้นเพียงทำการบล็อกพอร์ตพื้นฐาน ถึงกระนั้น ... มันค่อนข้างโง่ที่จะเปิดใช้งานสิ่งนี้ตามค่าเริ่มต้น
Rob Evans

ใช่นั่นเกิดขึ้นกับฉันหลังจากคิดไปเล็กน้อยว่าทำไมพวกเขาถึงทำเช่นนี้ กระนั้นก็เป็นกระบองที่น่าเกลียดจริงๆ และความคิดที่ว่าการเปิดใช้งานโดยค่าเริ่มต้นนั้นเป็นเพียงความจองหองธรรมดา
AJB

38

คุณควรลองฆ่ากระบวนการที่กำลังฟังอยู่บนพอร์ต 80

Killall จะฆ่าปมแอปทั้งหมดที่ทำงานอยู่ คุณอาจไม่ต้องการทำเช่นนั้น ด้วยคำสั่งนี้คุณสามารถฆ่าเพียงหนึ่งแอพที่กำลังฟังบนพอร์ตที่รู้จัก

หากใช้ unix ให้ลองคำสั่งนี้:

sudo fuser -k 80/tcp    

1
ขอบคุณยากิ โหนด killall ล้มเหลวสำหรับฉัน แต่ใช้งานได้
Pat M

ขอบคุณ! killall และ lsof -i ใช้งานไม่ได้สำหรับฉัน แต่สิ่งนี้ทำได้
karfus

1
คุณอาจไม่ต้องการฆ่าปมแอปทั้งหมดที่ทำงานอยู่
Yaki Klein

28

สาเหตุข้อผิดพลาด: คุณกำลังพยายามใช้งานสายไม่ว่างport number

โซลูชันที่เป็นไปได้สองแบบสำหรับ Windows / Mac

  1. หมายเลขพอร์ตที่ใช้ฟรีในปัจจุบัน
  2. เลือกหมายเลขพอร์ตอื่นสำหรับโปรแกรมปัจจุบันของคุณ


1. หมายเลขพอร์ตฟรี

ของ windows

1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F

ป้อนคำอธิบายรูปภาพที่นี่

Mac

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

netstat -vanp tcp | grep 3000

สำหรับ OSX El Capitan และใหม่กว่า (หรือถ้า netstat ของคุณไม่รองรับ -p) ให้ใช้ lsof

sudo lsof -i tcp:3000

หากวิธีนี้ไม่ช่วยแก้ปัญหาของคุณMacผู้ใช้สามารถอ้างถึงการสนทนาที่สมบูรณ์เกี่ยวกับปัญหานี้ค้นหา (และฆ่า) กระบวนการล็อกพอร์ต 3000 บน Mac


2. เปลี่ยนหมายเลขพอร์ตหรือไม่

ของ windows

set PORT=5000

Mac

export PORT=5000

คุณสามารถทำได้ในหนึ่งคำสั่งใน windows ด้วย:netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Z. Khullah

27

ภายใต้คอนโทรลเลอร์ env คุณสามารถใช้:

pkill node ก่อนที่จะเรียกใช้สคริปต์ของคุณควรทำงาน

จำไว้ว่าคำสั่งนี้จะฆ่าทุกคน nodeกระบวนการซึ่งอาจไม่ถูกต้องหากคุณมีเช่นคอนเทนเนอร์ที่ใช้งานเพียงหนึ่งอินสแตนซ์เรามี env ที่คุณสามารถรับประกันได้

ในสถานการณ์อื่น ๆ ฉันขอแนะนำให้ใช้คำสั่งเพื่อฆ่า id กระบวนการหรือชื่อที่คุณพบโดยการค้นหาโดยทางโปรแกรม เช่นถ้ากระบวนการของคุณเรียกว่าโหนดเซิร์ฟเวอร์-1 pkill node-server-1ที่คุณสามารถทำได้

ทรัพยากรนี้อาจมีประโยชน์ที่จะเข้าใจ: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/


2
pgrep nodeก่อนถึงมือหากคุณต้องการระวังเล็กน้อยและดูว่าnodeกระบวนการใดที่กำลังทำงานอยู่
Josh.F

1
ทั้งหมด! ฉันกำลังพูดถึงในกรณีที่มันเป็นภาชนะบรรจุหรือสถานที่ที่มีการควบคุมอย่างมากสำหรับกระบวนการ
Javier Cobos

นี่เป็นคำตอบที่ยอดเยี่ยมที่ฉันจะพูดมากกว่าที่คนอื่น ๆ ให้ไว้ ทุกคนโปรดโหวตมัน
Jitendra Pawar

@JavierCobos: หากคุณกำลังพูดถึงภายในคอนเทนเนอร์หรือพื้นที่ควบคุมที่คล้ายกันโปรดเพิ่มข้อมูลนั้นลงในคำตอบด้วยตัวเอง หลายคนไม่ได้อยู่ในสภาพแวดล้อมดังกล่าวโดยเฉพาะอย่างยิ่งในเครื่องจักรที่ใช้ในการพัฒนาและสิ่งนี้อาจมีผลกระทบโดยไม่ตั้งใจตามที่เป็น Downvoting แต่ยินดีเปลี่ยนการลงคะแนนด้วยการชี้แจงที่เหมาะสม
lindes

1
หลายคนจะ ... แต่ในฐานะคนที่ใช้เวลาส่วนสำคัญช่วยฝึกอบรมนักพัฒนารุ่นเยาว์และนอกเหนือจากบริบทนั้นฉันสามารถบอกคุณได้ว่ามีผู้คนมากมายที่ใช้คำตอบใน Stack Overflow โดยไม่เข้าใจว่าพวกเขากำลังทำอะไร .. พวกเขากำลังเผชิญกับปัญหาและเห็นสิ่งที่เป็นตัวแทนในการแก้ไขสิ่งที่ดูเหมือนจะเป็นปัญหาของพวกเขาและพวกเขาทำงานกับมัน ดังนั้น ... โดยส่วนตัวฉันต้องการเว็บไซต์ที่ให้คำอธิบายที่ดีและเสริมสร้างนิสัยทั่วไปที่ดี นั่นคือสิ่งที่ฉันมาจากบน ฉันรู้ว่านี่ไม่ใช่มุมมองเดียว :)
lindes

16

แอปพลิเคชันของคุณทำงานบนพอร์ตนั้นแล้ว 8080 ใช้รหัสนี้เพื่อฆ่าพอร์ตและเรียกใช้รหัสของคุณอีกครั้ง

sudo lsof -t -i tcp:8080 | xargs kill -9

คำถามอ้างอิงถึงพอร์ต 80 ไม่ใช่ 8080 นอกจากนี้ในขณะนี้อาจใช้การกำจัดกระบวนการที่กระทำผิดกฎหมายในพอร์ต 8080 การใช้งานkill -9นั้นค่อนข้างเกินจริงและในความคิดของฉันคำแนะนำที่น่ากลัวชิ้นหนึ่งที่ให้โดยไม่มีคำเตือนเฉพาะเกี่ยวกับ มัน. เพียงแค่killอาจจะทำเคล็ดลับและจริงๆเป็นปัญหาพื้นฐานในคำถามนี้ผมคิดว่าพวกเขากำลังพยายามอีกครั้งเรียกใช้เซิร์ฟเวอร์ซ้ำแล้วซ้ำอีกดังนั้นนี้เป็นเพียงสับไม่ได้แก้ไข พวกเขาจำเป็นต้องมีความเข้าใจที่ดีขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นซึ่งคำตอบนี้ไม่ได้ให้
lindes

15

อีกสิ่งหนึ่งที่สามารถให้ข้อผิดพลาดนี้คือเซิร์ฟเวอร์ HTTP สองตัวในรหัสโหนดเดียวกัน ฉันกำลังอัปเดตรหัส Express 2 เป็น Express 3 บางส่วนและมีสิ่งนี้ ...

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

และมันก่อให้เกิดข้อผิดพลาดนี้


14

สิ่งนี้ใช้ได้สำหรับฉัน (ฉันใช้ mac) เรียกใช้คำสั่งนี้

lsof -PiTCP -sTCP:LISTEN

นี่จะแสดงรายการพอร์ตที่ syetem ของคุณใช้อยู่ ค้นหาPIDว่าโหนดของคุณกำลังทำงาน

COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node      17269 hientrq   16u  IPv6 0xc42959c6fa30c3b9      0t0  TCP *:51524 (LISTEN)
node      17269 hientrq   19u  IPv4 0xc42959c71ae86fc1      0t0  TCP localhost:1337 (LISTEN)

และเรียกใช้ kill -9 [YOUR_PID]


11

EADDRINUSEหมายความว่าพอร์ต (ซึ่งเราพยายามฟังในโหนดแอปพลิเคชัน) กำลังถูกใช้งานอยู่ เพื่อที่จะเอาชนะเราจำเป็นต้องระบุกระบวนการที่กำลังทำงานกับพอร์ตนั้น

ตัวอย่างเช่นหากเราพยายามฟังโหนดแอปพลิเคชันของเราในพอร์ต 3000 เราจำเป็นต้องตรวจสอบว่ามีการใช้พอร์ตอื่นอยู่แล้วโดยกระบวนการอื่นใด

ขั้นตอนที่ 1:

$sudo netstat -plunt |grep :3000

ว่าคำสั่งดังกล่าวให้ผลด้านล่าง

tcp6       0      0 :::3000                 :::*                    LISTEN      25315/node

ขั้นตอนที่ 2:

ตอนนี้คุณได้รับหมายเลขกระบวนการ (25315) ฆ่ากระบวนการ

kill -9 25315

ขั้นที่ 3:

npm run start

หมายเหตุ: โซลูชันนี้สำหรับผู้ใช้ linux


9
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID 
kill PID 
ex: kill 129393

3
โปรดเพิ่มบริบทเพิ่มเติมในคำตอบของคุณเพื่อช่วยให้ผู้อ่านในอนาคตเข้าใจรหัส / คำสั่ง
Milo

8

sudo kill $ (sudo lsof -t -i: 80)

เพื่อบังคับให้ฆ่า

sudo kill -9 $ (sudo lsof -t -i: 80)

ใช้ cmd ด้านบนเพื่อฆ่าพอร์ตเฉพาะแล้วเรียกใช้เซิร์ฟเวอร์ของคุณ


8

ลองคำสั่งทั้งสองและมันจะหยุดกระบวนการโหนดทั้งหมด

killall 9 node
pkill node
npm start 

1
แฮ็คนี้ช่วยฉันประหยัดเวลาได้มากขอบคุณ
Anoop PS

5

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณมีกระบวนการทำงานบนพอร์ตที่คุณต้องการเรียกใช้แอปพลิเคชันของคุณ

วิธีรับกระบวนการที่รันบนพอร์ตนั้นคำสั่ง:> sudo netstat -ap | grep: 3000

เอาท์พุท: คุณจะได้รับข้อมูลกระบวนการที่ใช้พอร์ตนั้น

tcp 0 0 IPaddress: 3000 : LISTEN 26869 / โหนด

ตอนนี้คุณสามารถฆ่ากระบวนการนั้น sudo kill -9 26869


ตรวจสอบคำตอบทั้งหมด แต่คุณแก้ปัญหาของฉัน
ราหุล


5

EADDRINUSE หมายถึงพอร์ตของแอป nodejs ของคุณถูกใช้งานแล้ว

  • ตอนนี้คุณได้ฆ่ากระบวนการ / แอพที่ทำงานบนพอร์ตนั้น
  • ค้นหารหัสกระบวนการของแอพโดย:

lsof -i tcp: 3000

  • ตอนนี้คุณจะได้รับรหัสกระบวนการจากนี้
  • เรียกใช้สิ่งนี้:

kill -9 กระบวนการรหัส


4

มีวิธียกเลิกกระบวนการโดยใช้ตัวจัดการงาน:

โปรดทราบว่าโซลูชันนี้ใช้สำหรับ Windows เท่านั้น

  1. ไปที่ตัวจัดการงาน (หรือใช้ทางลัดCtrl+ Shift+ Esc)

  2. ใน "กระบวนการพื้นหลัง" ค้นหากระบวนการ "Node.js" และยุติกระบวนการ (คลิกขวาที่กระบวนการแล้วเลือก "สิ้นสุดภารกิจ")

ป้อนคำอธิบายรูปภาพที่นี่

  1. ตอนนี้คุณน่าจะเริ่มได้อีกครั้ง

สำหรับผู้ใช้งาน Mac: 1. เรียกใช้ 'การตรวจสอบกิจกรรม' 2. ค้นหา 'โหนด' ในแถบค้นหาด้านบนขวา 3. ดับเบิลคลิกที่กระบวนการของโหนดและออก คุณพร้อมแล้ว !!!! การเข้ารหัสที่มีความสุข
Apogee

3

ฉันเคยเห็นข้อผิดพลาดนี้มาก่อน (ในโหนด) ด้วย http.client และเมื่อฉันจำได้ว่าปัญหาเกี่ยวกับการไม่เริ่มต้น httpClient หรือการตั้งค่าตัวเลือกที่ไม่ดีในการสร้าง httpClient และ / หรือในคำขอ URL


3

ฉันมีปัญหาเดียวกันด้วยและฉันเพียงปิดเทอร์มินัลแล้วเปิดเทอร์มินัลใหม่แล้วเปิดใช้งาน

node server.js

อีกครั้ง ใช้งานได้สำหรับฉันบางครั้งก็ต้องรอสองสามวินาทีจนกว่ามันจะทำงานอีกครั้ง

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


3

ข้อผิดพลาด: ฟัง EADDRINUSEหมายถึงพอร์ตที่คุณต้องการกำหนด / ผูกเข้ากับแอ็พพลิเคชันเซิร์ฟเวอร์ของคุณมีการใช้งานแล้ว คุณสามารถกำหนดพอร์ตอื่นให้กับแอปพลิเคชันของคุณ

หรือถ้าคุณต้องการที่จะกำหนดพอร์ตเดียวกันให้กับแอพ จากนั้นทำลายแอปพลิเคชันที่ทำงานที่พอร์ตที่คุณต้องการ

สำหรับโหนดแอ็พพลิเคชันที่คุณสามารถลองได้ให้ค้นหา id กระบวนการสำหรับแอปโหนดโดย:

ps -aux | grep node

หลังจากได้รับรหัสกระบวนการทำ

kill process_id

-aux บน windows 10 หรือไม่
Tom Stickel

ไม่มี -aux สำหรับระบบที่ใช้ Linux สำหรับระบบที่ใช้ windows คุณสามารถค้นหาระบบ montior สำหรับกระบวนการโหนดที่ต้องการและสิ้นสุด
Parth Vyas

2

ใน Debian ฉันพบว่าทำงานบนพอร์ต 80 คุณต้องออกคำสั่งเป็น root เช่น

sudo node app.js

ฉันหวังว่ามันจะช่วย


2

ในกรณีของฉัน Apache HTTP Server ทำงานบนพอร์ต 80 ฉันแก้ไขได้โดยออกคำสั่งเป็น root

sudo killall httpd

ปรับปรุง

หาก Jenkin ได้รับการติดตั้งและใช้งานบน Mac ของคุณ

  1. คุณสามารถตรวจสอบกับ sudo lsof -i tcp:8080
  2. ถ้าใช่และคุณต้องการหยุดเจนกิ้นส์เพียงครั้งเดียวให้เรียกใช้: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

2

ดูเหมือนว่ามีโหนดอื่นให้บริการกระบวนการทำงาน ตรวจสอบโดยพิมพ์ในคอนโซลของคุณ (Linux / Mac):

ps aux|grep node

และออกด้วย:

kill -9 <NodeProcessId>

หรือใช้สลับกัน

ng serve --port <AnotherFreePortNumber>

เพื่อให้บริการโครงการของคุณบนพอร์ตฟรีที่คุณเลือก


1

ในขณะที่ฆ่า NODE_PORT มันอาจฆ่ากระบวนการ chrome ของคุณหรืออะไรก็ตามที่ฟังพอร์ตเดียวกันและนั่นก็น่ารำคาญ

เชลล์สคริปต์นี้อาจมีประโยชน์ - ในกรณีของฉันพอร์ตคือ 1337 แต่คุณสามารถเปลี่ยนได้ตลอดเวลา

# LOGIC

CHROME_PIDS=`pidof chrome`
PORT_PIDS=`lsof -t -i tcp:1337`

for pid in $PORT_PIDS
do

if [[ ${CHROME_PIDS} != *$pid* ]];then

    # NOT FOUND IN CHROME PIDS

    echo "Killing $pid..."
    ps -p "$pid"

    kill -kill "$pid"
    fi

done

sails lift
# OR 'node app' OR whatever that starts your node

exit

1

ในกรณีของฉันฉันใช้เว็บโฮสติ้ง แต่มันเหมือนกันในโฮสต์ท้องถิ่นฉันใช้:

ps -aef | grep 'node' 

สำหรับการเฝ้าดูกระบวนการโหนดคอนโซลจะแสดงกระบวนการด้วย PID สำหรับฆ่ากระบวนการที่คุณต้องใช้คำสั่งนี้:

kill -9 PID

โดยที่ PID คือ id กระบวนการจากคำสั่งด้านบน


1

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


1

สำหรับคนอื่น ๆ บน windows 10 ที่มี node as localhostและทำงานบนพอร์ตเช่น 3500 ไม่ใช่ 80 ...

อะไรไม่ทำงาน:

killall    ?  command not found
ps -aux | grep 'node'     ?     ps:  user x unknown 

สิ่งที่แสดงข้อมูล แต่ยังไม่ทำงาน:

 ps -aef | grep 'node'
 ps ax
 kill -9 61864

ทำงานอะไร:

Git Bash หรือ Powershell บน Windows

  net -a -o | grep 3500   (whatever port you are looking for) 

สังเกต PID (ขวาสุด)
ฉันไม่killallสามารถทำงานได้ ...

  1. เปิดตัวจัดการงานของคุณ
  2. บนแท็บกระบวนการคลิกขวาที่ชื่อหรือคอลัมน์และเลือกเพื่อรวม PID
  3. จัดเรียงตาม PID จากนั้นคลิกขวาบน PID ที่เหมาะสมและคลิกที่สิ้นสุดภารกิจ

หลังจากนั้นไม่สนุกกับการออกกำลังกายบน windows ฉันรู้ว่าฉันสามารถใช้ตัวจัดการงานและค้นหาเอ็นจิ้นโหนดและจบมันได้

FYI ฉันใช้ Visual Studio Code เพื่อเรียกใช้ Node บนพอร์ต 3500 และฉันใช้ Git Bash shell ภายในรหัส VS ฉันออกอย่างสง่างามด้วย Ctrl + C แต่บางครั้งก็ไม่ได้ฆ่ามัน ฉันไม่ต้องการเปลี่ยนพอร์ตหรือรีบูตเพื่อให้ทำงานได้ หวังว่ามันจะช่วยให้ผู้อื่น มิฉะนั้นมันเป็นเอกสารสำหรับตัวเอง


1

สำหรับผู้ใช้ windowsรันคำสั่งต่อไปนี้ในหน้าต่าง PowerShell เพื่อฆ่ากระบวนการโหนดทั้งหมด

Stop-Process -processname node

1

ตัวเลือกที่ใช้งานได้สำหรับฉัน:

วิ่ง:

ps -ax | grep node

คุณจะได้รับสิ่งที่ชอบ:

 8078 pts/7    Tl     0:01 node server.js
 8489 pts/10   S+     0:00 grep --color=auto node    
 kill -9 8078
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.