स्थानीयहोस्ट को त्रुटि से कैसे मुक्त करें: EADDRINUSE सुनें


120

मैं विंडोज 7 पर नोडज में लिखे गए सर्वर का परीक्षण कर रहा हूं और जब मैं कमांड लाइन में परीक्षक को चलाने की कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)

मैं इसे रिबूट किए बिना कैसे ठीक कर सकता हूं?


9
sudo killall nodeकाम हो सकता है
हाशिम हुसैन

जवाबों:


101

इसका मतलब है कि आप जिस पते को सर्वर से जोड़ने की कोशिश कर रहे हैं वह उपयोग में है। किसी अन्य पोर्ट का प्रयास करें या उस पोर्ट का उपयोग करके प्रोग्राम को बंद करें।


मुझे पोर्ट 3000 का उपयोग करके कुछ भी नहीं मिला, लेकिन इसे बदलने से काम चल गया!
डेनिस

7
चूँकि यह सिंगल नोड प्रोग्राम मेरी मशीन पर पोर्ट 3000 का उपयोग करने वाली एकमात्र चीज़ है, इसलिए यह बहुत स्पष्ट प्रतीत होता है कि मेरी नोड प्रक्रिया की पिछली तात्कालिकता को ठीक से बंद करने से रोकने के लिए कुछ हुआ है। यह काम कर रहा था जब मैंने node app.jsइसे Ctrl + C के साथ प्रयोग किया और बंद कर दिया, लेकिन पहली बार उपयोग करने के बाद EADDRINUSE समस्या होने लगी npm start, इसलिए ऐसा लगता है कि असली समाधान Ctrl + C के अलावा किसी अन्य चीज का उपयोग करने के बाद बंद करने के लिए होगा npm start
डेविड मेसन

आपकी npm startस्क्रिप्ट एक से अधिक नोड प्रोग्राम, या पृष्ठभूमि में चलाए जाने वाले नोड प्रोग्राम, या प्रोग्राम में चाइल्ड प्रोसेस हो सकती है जो उस पोर्ट का उपयोग करते हैं।
fent

1
बहुत बार, यह त्रुटि इसलिए होती है क्योंकि नोड-प्रक्रिया को समाप्त नहीं किया गया है। लेकिन कभी-कभी पोर्ट अन्य प्रक्रियाओं द्वारा उपयोग में होता है, और इसलिए इसे समझने की सही प्रक्रिया को समझना मुश्किल हो सकता है। नीचे WolfReporter इस समस्या का एक सही समाधान है! stackoverflow.com/a/22875192/36975
क्वालबैन

6
मैंने किया ps aux | grep node, प्रक्रिया आईडी (दूसरा कॉलम) ढूंढा और बस इसे kill <pid>(मेरा था kill 18762) मार दिया ।
nik_m

168

Daud:

ps -ax | grep node

आपको कुछ मिलेगा:

60778 ??         0:00.62 /usr/local/bin/node abc.js

फिर करो:

kill -9 60778

धन्यवाद! मेरी मशीन पर काम करता है!
olefrank

धन्यवाद। मुझे यही चाहिए था। मैं pm2 स्थापित किया था, जो ऑटोस्टार्ट्स नोड एप को इसके बंद होने पर। मुझे pm2 को autostart नोड में अक्षम करना था।
KlevisGjN

काम करता है! बहुत बहुत धन्यवाद
विम

9
आप विंडोज पर कैसे करते हैं?
विलियम

kill -15 60778एक बहुत बेहतर होगा क्योंकि यह प्रक्रिया को इनायत से बाहर निकलने की अनुमति देगा ( SIGTERM) इसके बजाय अगर एकSIGKILL
प्राज

39

लिनक्स पर (उबंटू डेरिवेटिव कम से कम)

killall node

इस फॉर्म की तुलना में आसान है।

ps | grep <something>
kill <somepid>

यदि आपके पास कोई अनाथ बच्चा है जो पोर्ट को पकड़े हुए काम करेगा। इसके बजाय, यह करें:

netstat -punta | grep <port>

यदि पोर्ट हो रहा है तो आपको कुछ इस तरह दिखाई देगा:

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>

अब पिड द्वारा मारें:

kill -9 <pid>

1
इसे पूर्ण उत्तर के रूप में चिह्नित किया जाना चाहिए। मेरे मामले में भी, यह एक अनाथ बच्चा था। क्या इसे वे एक ज़ोंबी प्रक्रिया कहते हैं?
नितीश इन्पुरसूट ऑफ थाप्पिनेस

1
उम्मीद के बजाय <pid>/<parent>मुझे मिलता है-
फ्रांसिस्को कोरालेस मोरालेस

35

निम्न आदेश आपको नोड प्रक्रिया चलाने की एक सूची देगा।

ps | grep node

उस पोर्ट को खाली करने के लिए, निम्नलिखित का उपयोग करके प्रक्रिया को रोकें।

kill <processId>

3
आप प्रक्रिया | grep -v grepको बाहर करने के लिए एक जोड़ना चाहते हो सकता grepहै।
गैरेट हाइड

6
जैसा कि मूल पोस्टर में लिखा है: "विंडोज़ 7 पर" ... ;-)
गोलो रोडेन

4
एक बेहतर विकल्प होगाpidof node
Itay Grudev

pidofआसानी से homebrewbrew install pidof
इलेक्ट्रब्लॉक के

1
यदि आप अधिक भाग रहे हैं, तो बस नोड अनुप्रयोग संभव है कि पता किसी अन्य अनुप्रयोग से बंधा हो। क्या उस पोर्ट की खोज करना बेहतर नहीं होगा जो उस पोर्ट से जुड़ा है जिसे आप शुरू करना चाहते हैं? यानी: linux के लिए आप netstat का इस्तेमाल कर सकते हैं -lnptu | grep पोर्ट #। सुनिश्चित नहीं हैं कि विंडोज़ के लिए समकक्ष क्या है।
क्रिस 12

31

आपको त्रुटि मिल रही है EADDRINUSEक्योंकि पोर्ट, जिसे आपका एप्लिकेशन उपयोग करना चाहता है, एक अन्य प्रक्रिया द्वारा कब्जा कर लिया गया है। इस पोर्ट को रिलीज़ करने के लिए, आपको ऑक्यूपिंग प्रक्रिया को समाप्त करना होगा।

चूंकि आप विंडोज पर हैं , आप कमांड प्रॉम्प्ट ( cmd) का उपयोग करके प्रक्रिया को समाप्त कर सकते हैं । उसके साथcmd आप अवरुद्ध आवेदन की प्रक्रिया आईडी (पीआईडी) की खोज कर सकते हैं। प्रक्रिया को समाप्त / मारने के लिए आपको PID की आवश्यकता होगी।

यहाँ एक कदम दर कदम गाइड है ...

  1. सभी प्रक्रियाएं खोजें जो एक निर्दिष्ट पोर्ट पर चल रही हैं (इस उदाहरण में, पोर्ट "3000" है):

    netstat -ano | ": 3000" ढूंढें

  2. netstatआदेश सभी प्रक्रियाओं निर्दिष्ट पोर्ट पर चल रहा है ऊपर सूची जाएगा। netstatपरिणामों के अंतिम कॉलम में आप PIDs देख सकते हैं (इस उदाहरण में, PID "8308" है)। आप किसी विशिष्ट के बारे में अधिक जानकारी प्राप्त कर सकते हैंPID निम्न कमांड चलाकर :

    टास्कलिस्ट / फाई "पिड इक 8308"

  3. यदि आप किसी प्रक्रिया को समाप्त करना चाहते हैं, तो आप इसका उपयोग करके निम्न आदेश के साथ कर सकते हैं PID (इस उदाहरण में, पीआईडी ​​"8308" है):

    टास्ककिल / पीआईडी ​​8308 / एफ

स्क्रीनशॉट

यहाँ छवि विवरण दर्ज करें


1
ठोस व्याख्या।
जो हैली

19

जब आपको कोई त्रुटि मिलती है: त्रुटि को सुनें,

निम्नलिखित शेल कमांड चलाने का प्रयास करें:

netstat -a -o | grep 8080
taskkill /F /PID 6204

मैं grep8080 के लिए एड करता हूं , क्योंकि मुझे पता है कि मेरा सर्वर पोर्ट 8080 पर चल रहा है। ( staticमुझे बताता है कि जब मैं इसे शुरू करता हूं: 'सेवारत "।" http://127.0.0.1:8080 ' पर।) आपको एक अलग खोज करनी पड़ सकती है। बंदरगाह।


1
अंत में! एक उत्तर जो पोर्ट द्वारा खोज करता है, प्रक्रिया के बजाय। यह केवल नोड नहीं है जो एक पोर्ट को बाँध सकता है!
माइकल शेपर

मैंने यह पता लगाने के लिए एक मॉड्यूल का उत्पादन किया कि कौन सी रनिंग प्रक्रिया पोर्ट को लॉक कर रही है, जिसे पोर्थोग कहा जाता है । यह मूल रूप से ऊपर दिए गए कोड को निष्पादित करता है।
कोरी

15

मान लीजिए कि आपका सर्वर चालू है port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)

इसके बाद उपयोग करें kill -9 <pid>

उपरोक्त मामले में sudo kill -9 11716


12

एक निश्चित बंदरगाह पर चल रही प्रक्रिया को मारने के लिए नीचे दिए गए आदेश का उपयोग करें - नीचे दिए गए उदाहरण में 3000

kill -9 $(lsof -t -i:3000)

7

एक संभव समाधान जो मेरे लिए काम करता था वह बस ब्राउज़र में खिड़की को बंद करना था जहां मेरे पास " http: // localhost: 3000 / " स्क्रिप्ट चल रही थी।


हां, ब्राउज़र विंडो अभी भी खुली है, जो लोकलहोस्ट पोर्ट्स :-) के साथ एक आम गेटका है :-)
डेव एवरिट


6

जब आपको कोई त्रुटि मिलती है

त्रुटि: EADDRINUSE सुनें

कमांड प्रॉम्प्ट खोलें और निम्न निर्देश टाइप करें:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>

इसके बाद फोन गैप इंटरफेस को रिस्टार्ट करें।

यदि आप यह जानना चाहते हैं कि आईडी फोनगैप किस प्रक्रिया का उपयोग कर रहा है, तो TASK MANAGER खोलें और कॉलम हेडिंग PID को देखें और PID नंबर खोजें।


मुझे काम करने के लिए टास्ककिल नहीं मिली, इसलिए मैंने टास्क मैनेजर खोला और पीआईडी ​​को जोड़ा और उसे वहाँ मार दिया
टॉम स्टिकेल

5

killall -9पैट्रिक द्वारा सुझाए गए पूर्वोक्त नोड, उम्मीद के मुताबिक काम करता है और समस्या को हल करता है, लेकिन आप इस उत्तर के संपादित हिस्से को पढ़ना चाह सकते हैं कि क्योंkill -9 का सबसे अच्छा तरीका नहीं हो सकता है।

इसके शीर्ष पर आप सभी सक्रिय प्रक्रियाओं को नेत्रहीन रूप से मारने के बजाय एकल प्रक्रिया को लक्षित करना चाह सकते हैं।

उस स्थिति में, पहले उस पोर्ट पर चलने वाली प्रक्रिया का आईडी (पीआईडी) प्राप्त करें (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

(लिस्टेन) तो बस करो (पीएस - वास्तव में नहीं। कृपया नीचे पढ़ते रहें):

kill -9 57385

4

यह मैक पर काम करता है:

चरण 1।

sudo lsof -i tcp:3000 (or whatever port you want to kill)

उपरोक्त कमांड आपको वर्तमान में पोर्ट को प्रोसेस प्रोसेस (s) देगा।

चरण 2।

Kill -9 <pid>

3

आप app.js या ur प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल में अपना पोर्ट बदल सकते हैं।

डिफ़ॉल्ट ('पोर्ट', 80)

और यह देखने के लिए कि पोर्ट 80 पहले से उपयोग में है या नहीं

netstat -antp | grep 80

netstat -antp | grep नोड |

आप देख सकते हैं कि नोड प्रक्रिया पहले से चल रही है या नहीं।

ps -ef | grep नोड |

और यदि आपको इसका पहले से चल रहा है, तो आप इसका उपयोग करके इसे मार सकते हैं

हत्या का नोड


1

मैंने 2 सर्वर बनाए, एक ही पोर्ट 8081 पर सुनना, एक ही कोड से सीखना, जबकि

1 सर्वर क्रिएशन शूड ने EADDRINUSE के साथ दूसरा सर्वर निर्माण विफल हो गया है

नोड.जेएस कॉलबैक देरी न तो काम करने के पीछे कारण हो सकता है, या 2 डी सर्वर निर्माण में अपवाद था, और कार्यक्रम से बाहर हो गया, इसलिए 1 तारीख भी बंद है

2 सर्वर इश्यू संकेत, मैं से मिला: त्रुटि को कैसे ठीक करें: नोडज का उपयोग करते समय ईएडीआरआरआईएनयूडी सुनें?


1

त्रुटि: इसे टर्मिनल में उबंटू रन में हल करने के लिए EADDRINUSE सुनो netstat -nptl और इसके बाद kill -9 {process-number}यह कमांड नोड प्रक्रिया को मारने के लिए है और अब आप फिर से नोड server.js कमांड चलाने की कोशिश कर सकते हैं

भूतपूर्व

सुनिए EADDRINUSE ::: 8080

netstat -nptl

tcp6 0 0 ::: 9000 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 5800 ::: * LISTEN -
tcp6 0 0 ::: 5900 ::: * LISTEN -
tcp6 0 0 ::: 8080 :: : * LISTEN 10401 / नोड
tcp6 0 0 :::8080 ::: * LISTEN 9660 / java
tcp6 0 0 ::: 80 ::: * LISTEN -
tcp6 0 0 ::: 22 :: * LISTEN -
tcp6 0 0 ::: 10137 ::: * लिस्टेन 9660 / जावा

मार -9 10401


2
उपयोगकर्ता ने कहा कि यह विंडोज़ पर है। विंडोज पर netstatअलग-अलग पैरामीटर मिलते हैं। netstat -a -p tcp -b -vप्रक्रिया नाम का उत्पादन करेगा।
आर्बोरियल

0

मेरे पास मेरे मैक और मेरे रास्पबेरी पाई पर नोड रेड है। ठीक उसी तरह की समस्या थी और 'किंडल' करने से मदद नहीं मिली। एक बार जब मैंने रास्पबेरी पाई को बंद कर दिया और अपने कंप्यूटर को पुनरारंभ किया तो यह ठीक काम किया।


0

यह संभव है कि आपने npm स्टार्ट कमांड को दो अलग-अलग टैब में चलाने की कोशिश की हो। यदि आप पहले से ही कुछ टैब में चल रहे हैं तो npm शुरू करें।


कृपया अधिक जानकारी प्रदान करें।
देशदीप सिंह

0

उन सभी लोगों के लिए, जिन्होंने उपरोक्त सभी की कोशिश की है, लेकिन फिर भी रूज प्रक्रिया नहीं पा सकते हैं, उन सभी को फिर से आज़माएं, लेकिन सुनिश्चित करें कि आप कमांड के सामने "sudo" शामिल करें।


0

यदि आप UI को अधिक पसंद करते हैं, तो विंडोज़ टास्क मैनेजर में प्रक्रिया Node.js ढूंढें और इसे मार दें।


0

ps -ef | grep नोड app.js पाते हैं, app.js के पीआईडी ​​को मारते हैं


0

बस नोड को प्रारंभ नोड की तुलना में ubantu के टर्मिनल में pkill -9 नोड के रूप में नोड को मारें


0

टर्मिनल पर निम्न कमांड का उपयोग करने के लिए आपको पोर्ट को मारने की आवश्यकता होगी

$ sudo killall -9 nodejs

0

[हल किया]

यह बहुत देर हो सकती है लेकिन यह एक आकर्षण की तरह काम कर रहा है।

आपको pm2स्थापित करने की आवश्यकता है

npm install -g pm2

वर्तमान चल रहे सर्वर (server.js) को रोकने के लिए:

pm2 stop -f server.js

0

मैंने अपने पैकेज में नीचे जोड़कर इस मुद्दे को हल किया है सक्रिय PORT - 4000 (मेरे मामले में) को मारने के लिए। WSL2 / Linux / Mac पर चल रहा है

"scripts": {
    "dev": "nodemon app.js",
    "predev":"fuser -k 4000/tcp && echo 'Terminated' || echo 'Nothing was running on the PORT'",
  }

स्रोत


-1

नोड सर्वर को मारने के लिए सबसे पहले अपने टर्मिनल में इस कमांड को चलाएं:

  1. top
  2. दूसरी विंडो खोलें फिर सर्वर idको पिछली विंडो से कॉपी करें : PID number -9 kill इसलिए अब आपने अपने ऐप को चलाने के लिए अपने नोड सर्वर को फिर से मारने की कोशिश की।

-1

मैंने netstat -ano | grep "portnumber"उस प्रक्रिया के लिए पोर्ट नंबर / PID को सूचीबद्ध करने के लिए कमांड का उपयोग किया । फिर, आप उपयोग कर सकते हैंtaskkill -f //pid 111111 इस प्रक्रिया को मारने के लिए , अंतिम मूल्य जिसे आप पहले कमांड से पाते हैं।

एक समस्या जो मैं कई बार चलाता हूं वह है प्रक्रिया को मारने के बाद भी नोड रिस्पॉन्ड करना, इसलिए मुझे नोड प्रक्रिया को मैन्युअल रूप से मारने के लिए अच्छे पुराने कार्य प्रबंधक का उपयोग करना होगा।


-4

विंडो में, कृपया इस कमांड को निष्पादित करें:

taskkill /F /PID 1952

1
1952 एक चर है। मारने की प्रक्रिया में एक अलग आईडी हो सकती है।
एड्रियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.