localhost'u Hata'dan nasıl çıkarır: EADDRINUSE dinle


120

Windows 7'de nodejs'de yazılmış bir sunucuyu test ediyorum ve test cihazını komut satırında çalıştırmayı denediğimde aşağıdaki hatayı alıyorum

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

yeniden başlatmadan nasıl düzeltebilirim?


9
sudo killall nodekullanışlı olabilir
Hashir Hussain

Yanıtlar:


101

Sunucuyu bağlamaya çalıştığınız adresin kullanımda olduğu anlamına gelir. Başka bir bağlantı noktasını deneyin veya bu bağlantı noktasını kullanarak programı kapatın.


3000 numaralı bağlantı noktasını kullanarak hiçbir şey bulamadım, ancak değiştirmek işe yaradı!
Dennis

7
Bu tek düğümlü program, makinemde 3000 numaralı bağlantı noktasını kullanan tek şey olduğundan, düğüm işlemimin önceki somutlaştırmasının düzgün şekilde kapanmasını engelleyen bir şey olduğu oldukça açık görünüyor. node app.jsCtrl + C ile kullandığımda ve durdurduğumda çalışıyordu, ancak ilk kez kullandıktan sonra EADDRINUSE sorununu yaşamaya başladım npm start, bu yüzden gerçek çözüm, kullandıktan sonra kapatmak için Ctrl + C dışında bir şey kullanmak gibi görünüyor npm start.
David Mason

Sizin npm startkomut birden fazla düğüm programı veya arka planda ran bir düğüm programı olabilir veya program bu bağlantı noktasını kullanacak çocuk süreçleri olabilir.
2013

1
Çoğu zaman, bu hata bir düğüm işleminin jet sonlandırılmamış olması nedeniyle oluşur. Ancak bazen bağlantı noktası diğer işlemler tarafından kullanılır ve bu nedenle onu bloke eden doğru işlemi anlamak / bulmak zor olabilir. Aşağıdaki WolfReporter bu soruna doğru bir çözüm sunuyor! stackoverflow.com/a/22875192/36975
Haz'15'te

6
Yaptım ps aux | grep node, işlem kimliğini (ikinci sütun) buldum ve basitçe kill <pid>(benimki kill 18762) ile öldürün .
nik_m

168

Çalıştırmak:

ps -ax | grep node

Şöyle bir şey alacaksınız:

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

O zaman yap:

kill -9 60778

Teşekkürler! Makinemde çalışıyor!
olefrank

Teşekkürler. İhtiyacım olan buydu. Kapatıldığında uygulamayı otomatik başlatan pm2'yi kurdum. Düğümü otomatik olarak başlatmak için pm2'yi devre dışı bırakmak zorunda kaldım.
KlevisGjN

İşler! Çok teşekkürler
Wim den Herder

9
Bunu Windows'ta nasıl yaparsınız?
William

kill -15 60778SIGTERMSIGKILL
22'de

39

Linux'ta (en azından Ubuntu türevleri)

killall node

bu formdan daha kolay.

ps | grep <something>
kill <somepid>

Limanda yetim kalan bir çocuğunuz varsa hiçbiri çalışmayacaktır. Bunun yerine şunu yapın:

netstat -punta | grep <port>

Bağlantı noktası tutuluyorsa şöyle bir şey göreceksiniz:

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

Şimdi pid ile öldür:

kill -9 <pid>

1
Bu, tam cevap olarak işaretlenmelidir. Benim durumumda da öksüz bir çocuktu. Bu zombi süreci dedikleri şey mi?
Nithish Inpursuit Ofhappiness

1
Yerine beklenen <pid>/<parent>alıyorum-
Francisco Corrales Morales

35

Aşağıdaki komut size çalışan düğüm işlemlerinin bir listesini verecektir.

ps | grep node

Bu bağlantı noktasını boşaltmak için aşağıdakileri kullanarak işlemi durdurun.

kill <processId>

3
Süreci | grep -v grepdışlamak için bir eklemek isteyebilirsiniz grep.
Garrett Hyde

6
Orijinal afişin yazdığı gibi: "Windows 7'de" ... ;-)
Golo Roden

4
Çok daha iyi bir alternatif olabilirpidof node
Itay Grudev

pidofhomebrew ile brew install pidof
osx'te

1
Daha sonra sadece düğüm uygulamaları çalıştırıyorsanız, adresin başka bir uygulamaya bağlı olması mümkündür. Başlatmaya çalıştığınız bağlantı noktasına bağlı olan pid'i aramak daha iyi olmaz mıydı? yani: linux için netstat -lnptu | grep bağlantı noktası #. Windows için eşdeğerinin ne olduğundan emin değilim.
chrisst

31

EADDRINUSEUygulamanızın kullanmak istediği bağlantı noktası başka bir işlem tarafından işgal edildiği için hatayı alıyorsunuz . Bu bağlantı noktasını serbest bırakmak için işgal sürecini sonlandırmanız gerekir.

Üzerinde olduğundan , Windows , komut istemini kullanarak işlemi kesebilirler ( cmd). İle cmdengelleme uygulamasının işlem kimliğini (PID) keşfedebilirsiniz. İşlemi sonlandırmak / sonlandırmak için PID'ye ihtiyacınız olacak.

İşte adım adım bir kılavuz ...

  1. Belirli bir bağlantı noktasında çalışan tüm işlemleri bulun (bu örnekte Bağlantı Noktası "3000" dir):

    netstat -ano | bul ": 3000"

  2. netstatKomut Belirtilen bağlantı noktasında çalışan tüm işlemleri yukarı listeler. netstatSonuçların son sütununda PIDs'leri görebilirsiniz (bu örnekte, PID "8308" dir). PIDAşağıdaki komutu çalıştırarak belirli bir konu hakkında daha fazla bilgi edinebilirsiniz :

    görev listesi / fi "pid eq 8308"

  3. Bir işlemi sonlandırmak istiyorsanız, bunu aşağıdaki komutla yapabilirsiniz. PID (bu örnekte, PID "8308" dir):

    görevkill / pid 8308 / f

Ekran görüntüsü

görüntü açıklamasını buraya girin


1
sağlam açıklama.
Joe Healy

19

Hata aldığınızda Hata: EADDRINUSE'i dinleyin,

Aşağıdaki kabuk komutlarını çalıştırmayı deneyin:

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

Ben grepbenim sunucu portu 8080 çalışıyorsa biliyorum çünkü (8080 için ed staticbunu başlattığınızda söylüyor: 'hizmet veren '' http://127.0.0.1:8080 '.) Farklı bir aramak gerekebilir Liman.


1
Sonunda! İşlem yerine bağlantı noktasına göre arama yapan bir yanıt. Bir bağlantı noktasını bağlayabilen sadece düğüm değildir!
Michael Scheper

Hangi çalışan sürecin bir bağlantı noktasını kilitlediğini tespit etmek için porthog adı verilen bir modül ürettim . Temel olarak yukarıdaki kodu çalıştırır.
Corey

15

sunucunuzun çalışıyor olduğunu varsayalım 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)

o kullanımdan sonra kill -9 <pid>

yukarıdaki durumda sudo kill -9 11716


12

belirli bir bağlantı noktasında çalışan bir işlemi öldürmek için aşağıdaki komutu kullanın - aşağıdaki örnekte 3000

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

7

Benim için işe yarayan olası bir çözüm, karşılık gelen " http: // localhost: 3000 / " komut dosyasını çalıştırdığım tarayıcıdaki pencereyi kapatmaktı .


Evet, tarayıcı penceresi hala açık olan yerel ana bilgisayar bağlantı noktaları için yaygın bir sorun :-)
Dave Everitt

7

İşlem Kimliğini kontrol edin

sudo lsof -i: 8081

Belirli Süreci öldürmek yerine

sudo öldür -9 2925

görüntü açıklamasını buraya girin


6

Bir hata aldığınızda

Hata: EADDRINUSE dinle

Komut istemini açın ve aşağıdaki talimatları yazın:

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

Bundan sonra telefon boşluğu arayüzünü yeniden başlatın.

Telefon aralığının hangi süreç kimliğini kullandığını bilmek istiyorsanız, TASK MANAGER'ı açın ve PID Sütun başlığına bakın ve PID no.


Görev öldürmeyi işe alamadım, bu yüzden görev yöneticisini açtım ve PID'yi ekledim ve orada öldürdüm thx
Tom Stickel

5

killall -9Patrick tarafından önerilen yukarıda bahsedilen düğüm beklendiği gibi çalışır ve sorunu çözer, ancak bu cevabın neden olduğu ile ilgili düzenleme bölümünü okumak isteyebilirsiniz.kill -9 bunu yapmanın en iyi yolu olmadığına .

Üstelik tüm aktif süreçleri körü körüne öldürmek yerine tek bir işlemi hedeflemek isteyebilirsiniz.

Bu durumda, önce o bağlantı noktasında çalışan işlemin işlem kimliğini (PID) alın (örneğin 8888):

lsof -i tcp:8888

Bu şuna benzer bir sonuç verecektir:

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

(DİNLE) O zaman sadece yap (ps - aslında yapma. Lütfen aşağıda okumaya devam et):

kill -9 57385

4

Bu, Mac'te çalışır:

Aşama 1.

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

Yukarıdaki komut size şu anda bağlantı noktasını tutan İşlem Kimliklerini verecektir.

Adım 2.

Kill -9 <pid>

3

bağlantı noktanızı app.js'de veya ur proje yapılandırma dosyasında değiştirebilirsiniz.

varsayılan ('bağlantı noktası', 80)

ve 80 numaralı bağlantı noktasının halihazırda kullanımda olup olmadığını görmek için

netstat -antp | grep 80

netstat -antp | grep düğümü

düğüm işleminin zaten çalışıp çalışmadığını görmek isteyebilirsiniz.

ps -ef | grep düğümü

ve zaten çalıştığını görürseniz, kullanarak öldürebilirsiniz.

killall düğümü


1

Öğrenirken aynı 8081 portunu dinleyen, aynı koddan çalışan 2 sunucu oluşturdum

1. sunucu oluşturma shud çalıştı 2. sunucu oluşturma EADDRINUSE ile başarısız oldu

node.js geri arama gecikmeleri, hiçbirinin çalışmamasının nedeni olabilir veya 2. sunucu oluşturmada istisna olabilir ve programdan çıkılır, bu nedenle 1. sunucu da kapalıdır

2 sunucu sorunu ipucu, aldım: Nasıl düzeltilir Hata: nodejs kullanırken EADDRINUSE dinlesin mi?


1

Hata: Ubuntu'da çözmek için EADDRINUSE'yi dinleyin terminalde çalıştırın netstat -nptl ve kill -9 {process-number}bu komuttan sonra düğüm işlemini sonlandırmaktır ve şimdi node server.js komutunu tekrar çalıştırmayı deneyebilirsiniz.

eski

dinle EADDRINUSE ::: 8080

netstat -nptl

tcp6 0 0 ::: 9000 ::: * DİNLE 9660 / java
tcp6 0 0 ::: 5800 ::: * DİNLE -
tcp6 0 0 ::: 5900 ::: * DİNLE -
tcp6 0 0 ::: 8080 :: : * DİNLE 10401 / node
tcp6 0 0 ::: 20080 ::: * DİNLE 9660 / java
tcp6 0 0 ::: 80 ::: * DİNLE -
tcp6 0 0 ::: 22 ::: * DİNLE -
tcp6 0 0 ::: 10137 ::: * DİNLE 9660 / java

öldür -9 10401


2
Kullanıcı Windows'ta olduğunu söyledi. Windows'ta netstatfarklı parametreler alır. netstat -a -p tcp -b -vişlem adını verir.
arboreal84

0

Mac'imde ve Raspberry Pi'mde kırmızı düğüm yüklü. Tam olarak aynı sorunu yaşadım ve 'killall' yapmak yardımcı olmadı. Raspberry Pi'yi kapattıktan ve bilgisayarımı yeniden başlattıktan sonra iyi çalıştı.


0

Npm start komutunu iki farklı sekmede çalıştırmayı denemiş olabilirsiniz. Zaten bir sekmede çalışırken npm start'ı çalıştıramazsınız. Bir kez kontrol edin.


Lütfen daha fazla ayrıntı sağlayın.
DeshDeep Singh

0

Yukarıdakilerin hepsini denemiş, ancak yine de rouge işlemini bulamayanlar için hepsini tekrar deneyin ama komutların önüne "sudo" eklediğinizden emin olun.


0

UI'yi daha çok seviyorsanız, Windows görev yöneticisinde Node.js işlemini bulun ve öldürün.


0

ps -ef | grep düğümü app.js'yi bul, app.js pid'ini sonlandır


0

ubantu'nun terminalindeki pkill -9 düğümü olarak düğümü başlangıç ​​düğümünden daha basit bir şekilde öldürün


0

Terminalde aşağıdaki komutu kullanmaya çalışarak portu öldürmeniz gerekecek

$ sudo killall -9 nodejs

0

[Çözüldü]

Çok geç olabilir ama bir cazibe gibi çalışıyor.

İhtiyacınız pm2kurulacak

npm install -g pm2

Geçerli çalışan sunucuyu (server.js) durdurmak için:

pm2 stop -f server.js

0

WSL2 / Linux / Mac üzerinde çalışan aktif PORT - 4000'i (benim durumumda) öldürmek için package.json'uma aşağıdaki ekleyerek bu sorunu çözdüm

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

Kaynak


-1

Düğüm sunucusunu öldürmek için önce terminalinizde bu komutu çalıştırın:

  1. top
  2. başka bir pencere açın ve ardından sunucuyu idönceki pencereden kopyalayın : PID number -9 kill şimdi düğüm sunucunuzu öldürdünüz, uygulamanızı çalıştırmayı tekrar deneyin.

-1

netstat -ano | grep "portnumber"Bu işlem için bağlantı noktası numarasını / PID'yi listelemek için komutu kullandım . Ardından, taskkill -f //pid 111111işlemi sonlandırmak için kullanabilirsiniz , son değer ilk komuttan bulduğunuz pid'dir.

Bazen karşılaştığım bir sorun, süreci sonlandırdıktan sonra bile düğümün yeniden canlanmasıdır, bu nedenle düğüm sürecini manuel olarak sonlandırmak için eski iyi görev yöneticisini kullanmam gerekiyor.


-4

Pencerede lütfen şu komutu yürütün:

taskkill /F /PID 1952

1
1952 bir değişkendir. Öldürme sürecinin farklı bir kimliği olabilir.
Design by Adrian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.