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 nodejs
ofpkill node
als 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 ps
uit 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/tcp
dat 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:
- 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.
- pijpsymbool: | zal het resultaat van ps aux doorgeven om verder te manipuleren.
- 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 Manager
onder de details Tab & AMP; Selecteer node
Taken (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 kbd>.
23, Autoriteit 4%
In Windows-gebruikers: Open Task Manager
en end task
De 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 kbd>+ ALT kbd>+ DEL kbd>en / of opnieuw op te staan.