arrestare tutte le istanze del server node.js


186

Questa è la prima volta che lavoro con Node.js e ho riscontrato questo problema:

Ho avviato un server Node tramite il plug-in di un IDE. Sfortunatamente, non posso usare il terminale IDE. Quindi ho provato a eseguire lo script dalla riga di comando.

Questo è il problema: sto usando il modulo Express e la mia app sta ascoltando alcune porte (8080). Quando avvio l'app dalla riga di comando, genera questo errore:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

Anche se non sono molto sicuro di quale potrebbe essere questo errore, ho pensato che fosse perché l'app è in ascolto su una porta che è già in uso. Così ho fatto:

netstat -an

posso vedere

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

È perché il server Node è già avviato quando ho provato ad avviarlo dall'IDE.

Quindi voglio sapere come posso interrompere tutte le istanze del server? Inoltre, se puoi dirmi come rilevare cosa è in esecuzione su una porta e ucciderlo.


1
Mi dispiace, non ho detto che sono in ambiente Windows. Si prega di inviare comandi pertinenti. Grazie
Kiran Ambati,

e puoi anche trovare l'attività node.js nel taskmanager di Windows. trova l'avanzamento il cui nome è Node.js: lato server ... e apri le informazioni dettagliate, troverai il pid e i dettagli dell'avanzamento del nodojs
Xiuying Lan

Questo è quello che ha funzionato per me: superuser.com/questions/1183057/…
sconosciuto

Risposte:


422

Macchina Windows:

Devi uccidere un server Node.js e non hai altri processi Node in esecuzione, puoi dire al tuo computer di uccidere tutti i processi nominati node.exe. Sarebbe così:

taskkill /im node.exe

E se i processi persistono, è possibile forzare la chiusura dei processi aggiungendo il /fflag:

taskkill /f /im node.exe

Se hai bisogno di un controllo più approfondito e devi solo uccidere un server in esecuzione su una porta specifica, puoi usarlo netstat per trovare l'ID del processo, quindi inviare un segnale di interruzione ad esso. Quindi, nel tuo caso, dove si trova la porta 8080, potresti eseguire quanto segue:

C:\>netstat -ano | find "LISTENING" | find "8080"

La quinta colonna dell'output è l'ID del processo:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

È quindi possibile terminare il processo con taskkill /pid 14828 . Se il processo si rifiuta di uscire, aggiungere semplicemente il /fparametro (force) al comando.


Macchina Linux:

Il processo è quasi identico. È possibile uccidere tutti i processi Node in esecuzione sul computer (utilizzare -$SIGNALifSIGKILL non è sufficiente):

killall node

O anche usando netstat , puoi trovare il PID di un processo in ascolto su una porta:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

L'ID processo in questo caso è il numero prima del nome del processo nella sesta colonna, che è quindi possibile passare al kill comando:

$ kill 1073

Se il processo rifiuta di uscire, usa semplicemente il -9flag, che è un SIGTERMe non può essere ignorato:

$ kill -9 1073

1
scusa, come posso usare esattamente questi comandi? process.exit () potrebbe essere nel codice? ma il server è già avviato. È probabile che venga avviato con il comando node app.js ma non node-dev app.js. E "node killall" non funziona. Sto sbagliando? Grazie
Kiran Ambati,

1
process.exit()nella tua applicazione provoca la chiusura dell'istanza NodeJS. killall nodein bash ucciderebbe tutte le istanze di NodeJS in esecuzione sul tuo computer.
hexacyanide,

grazie @hexacyanide. Sto sviluppando su Windows. Questo rende il nodo killall un comando non valido perché non posso usarlo dalla riga di comando.
Kiran Ambati,

3
Prova taskkill /IM node.exe. Ucciderà tutti i processi nominati node.exe.
hexacyanide,

1
Ho dovuto usare taskkill / F / IM node.exe per farlo funzionare, grazie!
Luis

75

Il modo più veloce è

killall node

Funziona con Linux, OS X


Metodo semplice ma se è in esecuzione un'altra applicazione, dobbiamo essere più specifici.
Rajeev Uppala,

Non funziona per me. node: no process foundInoltre, quando cerco i processi di un nodo che vengono eseguiti sulla porta specifica, l'ID del processo ha -invece un numero stesso.
Giorgi Gvimradze,

49

È possibile utilizzare lsofottenere il processo associato alla porta richiesta.

Sfortunatamente le bandiere sembrano essere diverse a seconda del sistema, ma su Mac OS X è possibile eseguire

lsof -Pi | grep LISTEN

Ad esempio, sul mio computer ottengo qualcosa del tipo:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

Il secondo numero è il PID e la porta che stanno ascoltando è sulla destra prima di "(ASCOLTA)". Trova il PID canaglia e kill -9 $PIDtermina con estremo pregiudizio.


Ciao Jacob, per favore puoi modificare la risposta e aggiungere la versione di Windows perché sto sviluppando su Windows. Grazie
Kiran Ambati,

Non ho idea di come farlo su Windows, mi dispiace Kiran.
Jacob Groundwater

Questa è un'ottima risposta, soprattutto quando ci sono server con più nodi in esecuzione su porte diverse. Posso facilmente distinguere l'ID del processo in esecuzione su ciascuna porta.
Modulitos,

25

Terminale Windows e GitBash Avevo bisogno di usare questo comando all'interno del terminale Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
Questo è stato per me. Grazie
Adim Victor,

1
Questo è stato fatto anche per me. Ho trovato il modo più veloce per uccidere tutti i processi di nodo su Windows.
Assad

17

se si desidera interrompere un processo nodo specifico, è possibile accedere alla route della riga di comando e digitare:

ps aux | grep node

per ottenere un elenco di tutti gli ID di processo del nodo. ora puoi ottenere il tuo ID di processo (pid), quindi fare:

kill -9 PID

e se vuoi terminare tutti i processi del nodo, allora fai:

killall -9 node

-9 switch è come compito finale su Windows. forzerà la fine del processo. tu puoi fare:

kill -l

per vedere tutti gli switch del comando kill e i loro commenti.


8

Puoi provare questo:

taskkill /IM node.exe -F

7

Linux

Per impressionare i tuoi amici

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

Ma questo è quello che ricorderete

killall node


2

Se stai usando Windows, segui questo:

  1. Apri Task Manager, cerca questo processo: Task manager che mostra il processo Node - Node.js JavaScript lato server

  2. Quindi basta fare clic destro e "Termina operazione".

  3. Ecco fatto, ora tutti i comandi npm vengono eseguiti dall'inizio.


1

Soluzione multipiattaforma, stabile, migliore:

usa fkill per terminare il processo che sta prendendo la tua porta:

fkill -f :8080

Per installare fkill usa il comando: npm i -g fkill


1

Puoi provare

killall node

puoi anche provare

killall nodejs

Questi comandi sono già stati pubblicati più volte. Va bene pubblicarli di nuovo, ma poi dovresti almeno aggiungere qualche spiegazione in più alla tua risposta in modo che altri possano imparare da essa
Nico Haase,


0

Sto usando il sistema operativo Windows.

Ho interrotto tutto il processo del nodo e riavviato l'app che funzionava.

provare

taskkill /im node.exe

0

Utilizzare il comando seguente per terminare e riavviare il nodo server dal file batch

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

Premere in cmd o bash: Ctrl + C


Funziona solo nella vista terminale con il processo del nodo in esecuzione e non garantisce nemmeno di interrompere il processo.
Design di Adrian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.