2011-12-18 12 views
79

मैं एक सर्वर खिड़कियों पर NodeJS में लिखा परीक्षण कर रहा हूँ सुनने 7 और जब मैं कमांड लाइन मैं निम्नलिखित त्रुटि मिलती है में परीक्षक चलाने का प्रयासत्रुटि से स्थानीय होस्ट जारी करने के लिए कैसे: EADDRINUSE

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

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

+3

'sudo killall node' आसान हो सकता है –

उत्तर

76

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

+0

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

+6

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

+0

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

32

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

ps | grep node 

अप कि बंदरगाह मुक्त करने के लिए, निम्नलिखित का उपयोग कर प्रक्रिया को रोकने के।

kill <processId> 
+2

आप एक '| grep -v grep' को 'grep' प्रक्रिया को बाहर करने के लिए। –

+3

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

+4

एक ज्यादा बेहतर विकल्प होगा 'pidof node' –

126

रन:

ps -ax | grep node 

आप की तरह कुछ मिल जाएगा: तब करते

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

:

kill -9 60778 
+0

बहुत आसान जवाब, धन्यवाद! –

+0

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

+0

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

28

पर लिनक्स (Ubuntu डेरिवेटिव कम से कम)

killall node 

इस फ़ॉर्म से आसान है।

ps | grep <something> 
kill <somepid> 

यदि आपके पास बंदरगाह रखने वाले अनाथ बच्चे हैं तो न तो काम करेगा। इसके बजाय, इस कार्य करें:

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

अब पीआईडी ​​द्वारा मारने: बंदरगाह आयोजित किया जा रहा

netstat -punta | grep <port> 

यदि आप कुछ इस तरह देखेंगे

kill -9 <pid> 
+1

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

+1

अपेक्षित '/ 'के बजाय मुझे' -' –

17

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

निम्नलिखित खोल आदेशों चलाने की कोशिश करें:

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

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

+1

मिल गया है! एक जवाब जो प्रक्रिया के बजाए पोर्ट द्वारा खोजता है। यह सिर्फ नोड नहीं है जो एक बंदरगाह बांध सकता है! –

+0

मैंने यह पता लगाने के लिए एक मॉड्यूल बनाया कि कौन सी चल रही प्रक्रिया पोर्ट को लॉक कर रही है, जिसे [porthog] (https://github.com/coreybutler/porthog) कहा जाता है। यह मूल रूप से उपरोक्त कोड निष्पादित करता है। – Corey

0

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

+0

प्रश्न स्पष्ट रूप से 'रीबूट किए बिना' बताता है। – EJP

1

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

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

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

netstat -antp कर सकते हैं | ग्रेप 80

netstat -antp | grep node

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

ps -ef | ग्रेप नोड

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

killall नोड

-3

विंडो में, कृपया इस आदेश पर अमल को मार सकता है:

taskkill /F /PID 1952 
+1

1 9 52 एक चर है। मारने की प्रक्रिया में एक अलग आईडी हो सकती है। –

6

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

+0

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

1

मैं

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

1 सर्वर निर्माण काम किया है shud 2 सर्वर निर्माण EADDRINUSE

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

2 सर्वर समस्या का संकेत है, मैं से मिला: How to fix Error: listen EADDRINUSE while using nodejs?

0

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

+0

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

5

जब आप एक त्रुटि

Error: listen EADDRINUSE

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

netstat -a -o | grep 8080 
taskkill /F /PID** <*ur Process ID no*> 
कि पुनः आरंभ फोन खाई इंटरफेस के बाद

यदि आप जानना चाहते हैं कि कौन सी प्रक्रिया आईडी फोनगैप उपयोग कर रही है, तो टास्क प्रबंधक खोलें और कॉलम शीर्षक पीआईडी ​​ पर देखें और पीआईडी ​​संख्या खोजें।

+0

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

10

मान लें कि आपके सर्वर के बाद कि उपरोक्त मामले में kill -9 <pid>

का उपयोग 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) 

पर चल रहा है sudo kill -9 11716

1

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

पूर्व

सुनने EADDRINUSE ::: 8080

netstat -nptl

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

kill -9 10401

+2

उपयोगकर्ता ने कहा कि यह विंडोज पर है। विंडोज़ 'नेटस्टैट' पर विभिन्न पैरामीटर प्राप्त होते हैं। 'netstat -a -p tcp -b -v' प्रक्रिया नाम आउटपुट करेगा। – arboreal84

0

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

0

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

2

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

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

यहाँ एक चरण-दर-चरण मार्गदर्शिका है ...

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

    netstat -ano | find ":3000 "

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

    tasklist /fi "pid eq 8308"

  3. आप एक प्रक्रिया को समाप्त करना चाहते हैं, तो आप अपने PID (इस उदाहरण में, पीआईडी ​​है का उपयोग करके निम्न आदेश के साथ ऐसा कर सकते हैं: आप निम्न आदेश चलाकर एक विशिष्ट PID के बारे में और अधिक जानकारी प्राप्त कर सकते हैं "8308"):

    taskkill /pid 8308 /f

स्क्रीनशॉट

enter image description here

+0

ठोस स्पष्टीकरण। –

संबंधित मुद्दे