Testuję serwer napisany w nodejs w systemie Windows 7 i kiedy próbuję uruchomić tester w wierszu poleceń, pojawia się następujący błąd
Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)
jak mogę to naprawić bez ponownego uruchamiania?
sudo killall node
może się przydaćOdpowiedzi:
Oznacza to, że adres, z którym próbujesz powiązać serwer, jest używany. Wypróbuj inny port lub zamknij program korzystający z tego portu.
źródło
node app.js
Działało, gdy użyłem i zatrzymałem go za pomocą Ctrl + C, ale zacząłem mieć problem z EADDRINUSE po pierwszym użyciunpm start
, więc wydaje się, że prawdziwym rozwiązaniem byłoby użycie czegoś innego niż Ctrl + C do zamknięcia po użyciunpm start
.npm start
skrypt może być więcej niż jeden program węzeł, węzeł lub program, który jest prowadzony w tle, czy program może mieć procesów potomnych, którzy korzystają z tego portu.ps aux | grep node
znaleźć identyfikator procesu (druga kolumna) i po prostu go zabićkill <pid>
(mój byłkill 18762
).Biegać:
Otrzymasz coś takiego:
Następnie wykonaj:
źródło
kill -15 60778
byłoby dużo lepsze, ponieważ pozwoliłoby procesowi zakończyć się wdzięcznie (SIGTERM
) zamiast wysyłaniaSIGKILL
W systemie Linux (przynajmniej pochodne Ubuntu)
jest łatwiejsze niż ten formularz.
Żadne z nich nie zadziała, jeśli masz osierocone dziecko trzymające port. Zamiast tego zrób to:
Jeśli port jest przetrzymywany, zobaczysz coś takiego:
Teraz zabij przez pid:
źródło
<pid>/<parent>
otrzymuję-
Następujące polecenie wyświetli listę uruchomionych procesów węzłów.
Aby zwolnić ten port, zatrzymaj proces w następujący sposób.
źródło
| grep -v grep
aby wykluczyćgrep
proces.pidof node
pidof
został łatwo zainstalowany dla mnie na osx z homebrewbrew install pidof
Otrzymujesz błąd,
EADDRINUSE
ponieważ port, którego chce używać Twoja aplikacja, jest zajęty przez inny proces. Aby zwolnić ten port, musisz zakończyć proces zajmowania.Ponieważ jesteś w systemie Windows , możesz zakończyć proces za pomocą wiersza polecenia (
cmd
). Za pomocącmd
można odkryć identyfikator procesu (PID) aplikacji blokującej. Będziesz potrzebował PID, aby zakończyć / zabić proces.Oto przewodnik krok po kroku ...
Znajdź wszystkie procesy uruchomione na określonym porcie (w tym przykładzie Port to „3000”):
netstat
Komenda wyświetli się wszystkie procesy uruchomione na określonym porcie. W ostatniej kolumnienetstat
wyników można zobaczyćPID
s (w tym przykładzie PID to „8308”). Możesz dowiedzieć się więcej o konkretnymPID
, uruchamiając następujące polecenie:Jeśli chcesz zakończyć proces, możesz to zrobić za pomocą następującego polecenia, używając jego
PID
(w tym przykładzie PID to „8308”):Zrzut ekranu
źródło
Gdy pojawi się błąd Error: posłuchaj EADDRINUSE,
Spróbuj uruchomić następujące polecenia powłoki:
Wydałem
grep
dla 8080, ponieważ wiem, że mój serwer działa na porcie 8080. (static
mówi mi, kiedy go uruchamiam: „obsługa”. ” Pod adresem http://127.0.0.1:8080 '.) Być może będziesz musiał poszukać innego Port.źródło
załóżmy, że twój serwer działa
port 3000
po tym użyciu
kill -9 <pid>
w powyższym przypadku
sudo kill -9 11716
źródło
użyj poniższego polecenia, aby zabić proces działający na określonym porcie - 3000 w tym przykładzie poniżej
źródło
Jednym z możliwych rozwiązań, które zadziałało, było po prostu zamknięcie okna przeglądarki, w której był uruchomiony odpowiedni skrypt „ http: // localhost: 3000 / ”.
źródło
Sprawdź identyfikator procesu
sudo lsof -i: 8081
Niż zabij konkretny proces
sudo kill -9 2925
źródło
Kiedy pojawi się błąd
Otwórz wiersz polecenia i wpisz następujące instrukcje:
po tym zrestartuj interfejs przerwy telefonicznej.
Jeśli chcesz wiedzieć, którego identyfikatora procesu używa phonegap, otwórz TASK MANAGER i spójrz na nagłówek kolumny PID i znajdź numer PID.
źródło
Wspomniany
killall -9
węzeł, zasugerowany przez Patricka, działa zgodnie z oczekiwaniami i rozwiązuje problem, ale możesz przeczytać część edytującą tej właśnie odpowiedzi, dlaczegokill -9
nie jest to najlepszy sposób zrobienia tego.Ponadto możesz chcieć skupić się na pojedynczym procesie, zamiast ślepo zabijać wszystkie aktywne procesy.
W takim przypadku najpierw pobierz identyfikator procesu (PID) procesu działającego na tym porcie (powiedzmy 8888):
To zwróci coś takiego:
(SŁUCHAJ) Następnie po prostu zrób (ps - właściwie nie. Czytaj dalej):
źródło
Działa to na komputerach Mac:
Krok 1.
Powyższe polecenie poda identyfikator (y) procesów aktualnie utrzymujących port.
Krok 2.
źródło
możesz zmienić swój port w app.js lub w pliku konfiguracyjnym projektu ur.
domyślny ('port', 80)
i sprawdzić, czy port 80 jest już używany, możesz to zrobić
netstat -antp | grep 80
netstat -antp | grep node
możesz chcieć sprawdzić, czy proces węzła już działa, czy nie.
ps -ef | grep node
a jeśli okaże się, że już działa, możesz go zabić za pomocą
killall node
źródło
Stworzyłem 2 serwery nasłuchujące na tym samym porcie 8081, działające z tego samego kodu podczas nauki
Tworzenie pierwszego serwera nie powiodło się. Tworzenie drugiego serwera nie powiodło się z EADDRINUSE
Opóźnienia wywołań zwrotnych node.js mogą być przyczyną braku działania, lub utworzenie drugiego serwera miało wyjątek i program został zamknięty, więc pierwszy serwer jest również zamknięty
2 podpowiedź dotycząca problemu z serwerem, otrzymałem od: Jak naprawić błąd: słuchaj EADDRINUSE podczas korzystania z nodejs?
źródło
Błąd: posłuchaj EADDRINUSE, aby rozwiązać go w Ubuntu, uruchom w terminalu
netstat -nptl
i po tymkill -9 {process-number}
poleceniu to zabije proces węzła, a teraz możesz spróbować ponownie uruchomić polecenie node server.jsDawny
posłuchaj EADDRINUSE ::: 8080
netstat -nptl
tcp6 0 0 ::: 9000 ::: *
SŁUCHAJ 9660 / java tcp6 0 0 ::: 5800 ::: *
SŁUCHAJ - tcp6 0 0 ::: 5900 ::: *
SŁUCHAJ - tcp6 0 0 ::: 8080 :: : *
SŁUCHAJ 10401 / węzeł tcp6 0 0 ::: 20080 ::: *
SŁUCHAJ 9660 / java tcp6 0 0 ::: 80 ::: *
SŁUCHAJ - tcp6 0 0 ::: 22 ::: *
SŁUCHAJ - tcp6 0 0 ::: 10137 ::: * SŁUCHAJ 9660 / java
zabić -9 10401
źródło
netstat
otrzymuje różne parametry.netstat -a -p tcp -b -v
wyświetli nazwę procesu.Mam zainstalowany węzeł Node Red na moim Macu i moim Raspberry Pi. Miałem dokładnie ten sam problem i wykonanie „killall” nie pomogło. Po zamknięciu Raspberry Pi i ponownym uruchomieniu komputera wszystko działało dobrze.
źródło
Może się zdarzyć, że próbowałeś uruchomić komendę npm start na dwóch różnych kartach. Nie możesz uruchomić komendy npm start, gdy jest już uruchomiona na jakiejś karcie. Zaznacz to raz.
źródło
Każdy, kto wypróbował wszystkie powyższe rozwiązania, ale nadal nie może znaleźć procesu rouge, powinien spróbować wszystkich ponownie, ale upewnij się, że przed poleceniami znajduje się słowo „sudo”.
źródło
Jeśli bardziej podoba Ci się interfejs użytkownika, znajdź proces Node.js w menedżerze zadań systemu Windows i zabij go.
źródło
ps -ef | grep node znajdź app.js, zabij pid z app.js
źródło
po prostu zabij węzeł jako węzeł pkill -9 w terminalu ubantu niż węzeł początkowy
źródło
Będziesz musiał zabić port, próbując użyć następującego polecenia na terminalu
źródło
[ROZWIĄZANY]
Może jest już za późno, ale działa jak urok.
Musisz
pm2
być zainstalowanyAby zatrzymać aktualnie działający serwer (server.js):
źródło
Rozwiązałem ten problem, dodając poniżej w moim package.json dla zabicia aktywnego PORT - 4000 (w moim przypadku) Działa na WSL2 / Linux / Mac
Źródło
źródło
Aby zabić serwer węzłów, najpierw uruchom to polecenie w terminalu:
top
id
z poprzedniego okna:PID number -9 kill
więc teraz zabiłeś serwer węzła, spróbuj ponownie uruchomić aplikację.źródło
Użyłem polecenia
netstat -ano | grep "portnumber"
, aby wyświetlić numer portu / PID dla tego procesu. Następnie możesz użyćtaskkill -f //pid 111111
do zabicia procesu, ostatnią wartością jest pid znaleziony w pierwszym poleceniu.Czasami napotykam problem odradzania się węzła nawet po zabiciu procesu, więc muszę użyć starego dobrego menedżera zadań, aby ręcznie zabić proces węzła.
źródło
W oknie wykonaj następujące polecenie:
źródło