Node / Express: EADDRINUSE, adres al in gebruik – Kill server

Ik heb een eenvoudige server die draait in node.js met connect:

var server = require('connect').createServer();
//actions...
server.listen(3000);

In mijn code heb ik echte handlers, maar dat is het basisidee. Het probleem dat ik steeds krijg is

EADDRINUSE, Address already in use

Ik krijg deze foutmelding wanneer ik mijn applicatie opnieuw start nadat deze eerder is gecrasht of als er fouten zijn opgetreden. Aangezien ik geen nieuwe terminal van terminal open, sluit ik het proces af met ctr + z.

Ik ben er vrij zeker van dat ik alleen de server of verbinding hoef te sluiten. Ik heb geprobeerd server.close()te bellen in process.on('exit', ...);zonder succes.


Antwoord 1, autoriteit 100%

process.on('exit', ..)wordt niet aangeroepen als het proces crasht of stopt. Het wordt alleen aangeroepen wanneer de gebeurtenislus eindigt, en aangezien server.close()soort vande gebeurtenislus beëindigt (het moet nog steeds wachten op de momenteel lopende stapels hier en daar ) het heeft geen zin om dat in de exit-gebeurtenis te plaatsen…

Voer bij crash process.on('uncaughtException', ..)uit en voer bij kill process.on('SIGTERM', ..)

Dat gezegd hebbende, laat SIGTERM (standaard kill-signaal) de app opschonen, terwijl SIGKILL (onmiddellijke beëindiging) de app niets laat doen.


Antwoord 2, autoriteit 94%

U kunt ook via de opdrachtregelroute gaan:

ps aux | grep node

om de proces-ID’s op te halen.

Dan:

kill -9 PID

Als je de -9 doet bij het doden, wordt een SIGKILL verzonden (in plaats van een SIGTERM).
SIGTERM is voor mij soms genegeerd door node.


Antwoord 3, autoriteit 99%

Eerst wilt u weten welk proces port 3000

gebruikt

sudo lsof -i :3000

dit geeft een lijst van alle PIDdie op deze poort luisteren. Als je eenmaal de PIDhebt, kun je deze als volgt beëindigen:

kill -9 {PID}

Antwoord 4, autoriteit 98%

Ik heb dit gedaan op mijn laptop met win8. dit werkte.

Voer cmd.exe uit als ‘Beheerder’:

C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.

Antwoord 5, autoriteit 64%

Controleer de PID, d.w.z. de id van het proces dat op poort 3000 wordt uitgevoerd met het onderstaande commando:

lsof -i tcp:3000

Het zou zoiets als het volgende opleveren:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NODE NAME
node     5805  xyz    12u  IPv6  63135    0t0     TCP  *:3000 (LISTEN)

Sluit het proces nu af met :

kill -9 5805

Antwoord 6, autoriteit 45%

Ik heb deze oplossing gevonden, probeer het
Geef toestemming gebruik sudo

 sudo pkill node

Antwoord 7, autoriteit 24%

Herschrijven @Gerard’s opmerkingin mijn antwoord:

Probeer pkill nodejsof pkill nodeals op UNIX-achtigbesturingssysteem.

Hiermee wordt het proces afgesloten waarop de node-server op een willekeurige poort wordt uitgevoerd.
Werkte voor mij.


Antwoord 8, autoriteit 21%

Linux

Voer psuit en bepaal de PID van uw knooppuntproces.

Voer vervolgens sudo kill PID

uit

Vensters

Gebruik takenlijst om de lijst met lopende processen weer te geven:

tasklist /O

Dood vervolgens het knooppuntproces als volgt (gebruik de PID die is verkregen uit de opdracht tasklist):

taskkill /pid PID

Antwoord 9, autoriteit 18%

Voor Windows opent u Taakbeheer en zoekt u de node.exe-processen. Dood ze allemaal met End Task.


Antwoord 10, autoriteit 18%

Hier is een one-liner (vervang 3000 door een poort of een configuratievariabele):

kill $(lsof -t -i:3000)

Antwoord 11, autoriteit 12%

Ik kreeg deze fout een keer en nam veel van de benaderingen hier.

Mijn probleem was dat ik twee app.listen(3000);-aanroepen in hetzelfde app.js-script had.De eerste app.listen() slaagde waar de tweede gooide de fout.

Een ander nuttig commando dat ik tegenkwam dat me hielp met debuggen, was sudo fuser -k 3000/tcpdat alle frauduleuze processen die je misschien hebt gestart, zal doden (sommige processen kunnen opnieuw opstarten, bijvoorbeeld als ze voor altijd worden uitgevoerd. js, maar het was nuttig voor mij).


Antwoord 12, autoriteit 10%

Voor Visual Studio Noobs zoals ik

Misschien voert u het proces in andere terminals uit!

Na afsluitenvan de terminal in Visual Studio, verdwijnt de terminal gewoon.

Ik heb handmatigeen nieuwe gemaakt omdat ik dacht dat de vorige was vernietigd. In werkelijkheid was ik elke keer dat ik op Nieuwe terminalklikte, eigenlijk creëerdeeen nieuwe bovenop de vorige aan het maken.

Dus ik vond de eerste terminal en… Voila, ik draaide de server daar.


Antwoord 13, autoriteit 10%

ps aux | grep node
kill -9 [PID] (provided by above command)

Beschrijving:


  1. ps geeft de processtatus, aux geeft de lijst van a: alle gebruikersprocessen, u: eigen processen van de gebruiker, x: alle andere processen die niet aan terminal zijn gekoppeld.
  2. pijpsymbool: | zal het resultaat van ps aux doorgeven om verder te manipuleren.
  3. grep zoekt in de opgegeven tekenreeks (knooppunt in ons geval) uit de lijst van ps aux.

Antwoord 14, autoriteit 9%

Ter info, je kunt het proces in één commando beëindigen sudo fuser -k 3000/tcp. Dit kan gedaan worden voor alle andere poorten zoals 8000, 8080 of 9000 die gewoonlijk worden gebruikt voor ontwikkeling.


Antwoord 15, autoriteit 9%

Je kunt scenario’s tegenkomen waarin zelfs het doden van de thread of het proces de app niet daadwerkelijk beëindigt (dit gebeurt bij mij op Linux en Windows zo nu en dan). Soms is er al een instantie actief die u niet hebt gesloten.

Als gevolg van dit soort omstandigheden voeg ik liever toe aan mijn package.json:

"scripts": {
    "stop-win": "Taskkill /IM node.exe /F",
    "stop-linux": "killall node"
},

Ik kan ze dan bellen met:

npm run stop-win
npm run stop-Linux

Je kunt liefhebber worden en die BIN-commando’s maken met een argumentvlag als je wilt. Je kunt deze ook toevoegen als commando’s die moeten worden uitgevoerd binnen een try-catch-clausule.


Antwoord 16, autoriteit 9%

Ontdek eerst wat er draait met:

sudo lsof -nP -i4TCP:3000 | grep LISTEN

Je krijgt zoiets als:

php-fpm 110 root    6u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)
php-fpm 274 _www    0u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)
php-fpm 275 _www    0u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)

Dan kunt u het proces als volgt beëindigen:

sudo kill 110

Dan kun je het uitvoeren zonder de luister EADDRINUSE :::3000 fouten te krijgen


Antwoord 17, autoriteit 8%

PowerShell-gebruikers:

Taskkill /IM node.exe /F


Antwoord 18, autoriteit 8%

bash$ sudo netstat -ltnp | grep -w ':3000'
 - tcp6    0      0 :::4000      :::*        LISTEN      31157/node      
bash$ kill 31157

Antwoord 19, autoriteit 8%

Probeer in Linux

pkill nodejs 
//or 
pkill node

NB Dit zal alle processen doden

om een specifieke poort te verwijderen

// This will show all the port number which node js is using
netstat -lntp | grep node
// Kill your targeted used port
kill -HUP process_id 

Antwoord 20, autoriteit 7%

UI-oplossing Voor Windows-gebruikers: ik ontdekte dat de beste antwoorden niet voor mij werkten, het leken opdrachten te zijn voor Mac- of Linux-gebruikers. Ik vond een eenvoudige oplossing waarvoor geen commando’s nodig waren om te onthouden: open Taakbeheer (ctrl+shift+esc). Kijk naar achtergrondprocessen die worden uitgevoerd. Zoek iets Node.js en beëindig de taak.

Nadat ik dit had gedaan, was het probleem voor mij verdwenen. Zoals vermeld in andere antwoorden, zijn het achtergrondprocessen die nog steeds worden uitgevoerd omdat er eerder een fout is opgetreden en de reguliere functies voor afsluiten / opschonen niet zijn aangeroepen, dus een manier om ze te doden is door het proces in Taakbeheer te vinden en het daar te doden . Als je het proces vanaf een terminal/powerShell hebt uitgevoerd, kun je meestal ctrl+c gebruiken om het te beëindigen.


Antwoord 21, autoriteit 5%

Taakbeheer (ctrl+alt+del) ->

Tabblad Processen ->

selecteer het proces “node.exe” en klik op “Proces beëindigen”


Antwoord 22, autoriteit 5%

Windows door Cmd

1/2. zoeken => schrijf cmd => open node.js command prompt


2/2. Voer Windows-opdracht uit: taskkill

beëindigt een of meer taken of processen.

taskkill /f /im node.exe

/f– Force eindigde

/im– Specificeert de beeldnaam van het te beëindigen proces.

node.exe– uitvoerbaar bestand

Windows – Mannualy by Task Manager

Deze opdracht is hetzelfde als naar Task Manageronder de details Tab & AMP; Selecteer nodeTaken (Tidy Naar mijn mening).

en end task

Visual Studio

Soms is er meer dan één terminal / taak (client / server enzovoort).
Selecteer en sluit CTRL + C .


23, Autoriteit 4%

In Windows-gebruikers: Open Task Manageren end taskDe nodejs.exe-bestand, het werkt prima.


24, Autoriteit 3%

Met het respect voor alle antwoorden in het formulier wil ik een punt toevoegen.

Ik vond dat wanneer ik een knooppunt-app beëindigd is op fout met Ctrl + Z, de volgende keer dat ik het probeerde te openen, kreeg het dezelfde fout eaddrinuse.

Wanneer ik CTRL + C gebruik om een ​​knooppunt-app te beëindigen, de volgende keer dat ik het opende, deed het zonder een koppeling.

Het poortnummer wijzigen naar iets anders dan de fout die in fout is opgelost het probleem.


25, Autoriteit 3%

Alleen in het geval dat u deze regel meerdere keer per ongeluk hebt toegevoegd

app.listen(3000, function() {
  console.log('listening on 3000')
});

De bovenstaande code is voor Express, maar controleer of u dezelfde poort twee keer in uw code probeert te gebruiken.


26, Autoriteit 2%

U kunt Hot-Node gebruiken om uw server te voorkomen van crashen / run-time-fouten. Hot-knooppunt start automatisch de NODEJS-applicatie op voor u wanneer er een wijziging is in het knooppuntprogramma [Bron] / Process [Running Node-programma].

Installeer het hot-knooppunt met behulp van NPM met behulp van de mondiale optie:

NPM install-g hotnode


27, Autoriteit 2%

Op Windows ontving ik de volgende fout:

yaddrinuse: adres al in gebruik ::: 8081.

volgde deze stappen:

  • geopend CMD als admin
  • rende de volgende

Opdracht NetStat -ano | Findstr "PID: 8081"

Kreeg de volgende processen:

Gedood het via:

TAKKILL / PID 43144 / F

Op Mac kunt u dit doen:

Raghavkhunger @ MacBook-Air ~% LSOF -I TCP: 8081
Command PID User FD Type Device Size / Off Knooppuntnaam
Knooppunt 23722 Gebruikersnaam 24U IPv6 0xEED16D7CCFDDD347 0T0 TCP *: SUNPROXYADMIN (LUISTER)

Gebruikersnaam @ MacBook-Air ~% Kill -9 23722


28

Node draait ergens in het geheugen en heeft die haven afgesloten. Op Windows zal dit probleem gebeuren, zoals de meeste Windows-problemen, worden opgelost door CTRL + ALT + DEL en / of opnieuw op te staan.

Other episodes