C'est la première fois que je travaille avec Node.js et j'ai rencontré ce problème:
J'ai démarré un serveur de nœud via le plugin d'un IDE. Malheureusement, je ne peux pas utiliser le terminal de l'IDE. J'ai donc essayé d'exécuter le script à partir de la ligne de commande.
C'est le problème - j'utilise le module Express et mon application écoute un port (8080). Lorsque je lance l'application à partir de la ligne de commande, cette erreur est générée:
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)
Même si je ne suis pas très sûr de ce que cette erreur pourrait être, j'ai supposé que c'était parce que l'application écoute sur un port déjà utilisé. Alors j'ai fait:
netstat -an
Je vois
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
C'est parce que le serveur de nœud est déjà démarré lorsque j'ai essayé de le démarrer à partir de l'EDI.
Je veux donc savoir comment puis-je arrêter toutes les instances de serveur? Aussi, si vous pouvez me dire comment détecter ce qui tourne sur un port et le tuer.
Si vous avez besoin de tuer un serveur Node.js et qu'aucun autre processus de noeud n'est en cours d'exécution, vous pouvez demander à votre ordinateur de supprimer tous les processus nommés node.exe
. Cela ressemblerait à ceci:
taskkill /im node.exe
Et si les processus persistent, vous pouvez les forcer à se terminer en ajoutant l'indicateur /f
:
taskkill /f /im node.exe
Si vous avez besoin d'un contrôle plus fin et que vous ne devez tuer qu'un serveur qui s'exécute sur un port spécifique, vous pouvez utiliser netstat
pour rechercher l'ID de processus, puis lui envoyer un signal de suppression. Ainsi, dans votre cas, où le port est 8080
, vous pouvez exécuter ce qui suit:
C:\>netstat -ano | find "LISTENING" | find "8080"
La cinquième colonne de la sortie est l'ID de processus:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 14828
TCP [::]:8080 [::]:0 LISTENING 14828
Vous pourriez alors tuer le processus avec taskkill /pid 14828
. Si le processus refuse de quitter, ajoutez simplement le paramètre /f
(force) à la commande.
Le processus est presque identique. Vous pouvez soit tuer tous les processus de noeud exécutés sur la machine (utilisez -$SIGNAL
si SIGKILL
est insuffisant):
killall node
Ou aussi, en utilisant netstat
, vous pouvez trouver le PID d'un processus en écoute sur un port:
$ netstat -nlp | grep :8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1073/node
Dans ce cas, l'ID de processus est le numéro précédant le nom du processus dans la sixième colonne, que vous pouvez ensuite transmettre à la commande kill
:
$ kill 1073
Si le processus refuse de quitter, utilisez simplement l'indicateur -9
, qui est une variable SIGTERM
et ne peut pas être ignoré:
$ kill -9 1073
Le moyen le plus rapide est
killall node
Fonctionne avec Linux, OS X
Vous pouvez utiliser lsof
pour obtenir le processus lié au port requis.
Malheureusement, les drapeaux semblent être différents selon les systèmes, mais sous Mac OS X, vous pouvez exécuter
lsof -Pi | grep LISTEN
Par exemple, sur ma machine, j'ai quelque chose comme:
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)
Le deuxième numéro est le PID et le port qu'ils écoutent est à droite avant "(LISTEN)". Trouvez le PID non autorisé et le kill -9 $PID
pour terminer avec un préjudice extrême.
Terminal Windows et GitBash J'avais besoin d'utiliser cette commande dans un terminal Windows/Webstorm/GitBash
cmd "/C TASKKILL /IM node.exe /F"
Vous pouvez essayer ceci:
taskkill /IM node.exe -F
si vous voulez tuer un processus spécifique, vous pouvez aller à la ligne de commande:
ps aux | grep node
pour obtenir l'identifiant du processus et ensuitedo:
kill -9 PID
et si vous voulez tuer tous les processus alors faites:
killall -9 node
Linux
Pour impressionner vos amis
ps aux | grep -i node | awk '{print $2}' | xargs kill -9
Mais c'est celui dont vous vous souviendrez
killall node
Vous pouvez aussi essayer:
killall nodejs
tu peux essayer
killall node
vous pouvez aussi essayer
killall nodejs
Multiplateforme, stable, meilleure solution:
utilisez fkill pour tuer le processus qui prend votre port:
fkill -f :8080
Pour installer fkill, utilisez la commande suivante: npm i -g fkill
ça marche très bien dans windows 10
taskkill /f /im node.exe
Am utilisant le système d'exploitation Windows.
J'ai tué tout le processus de nœud et redémarré l'application qui fonctionnait.
essayer
taskkill /im node.exe
Si vous utilisez Windows, suivez ceci:
1) Ouvrez le gestionnaire de tâches, recherchez ce processus: http://prntscr.com/kv3uqx
2) Ensuite, faites un clic droit et "Fin de tâche".
3) Ca y est, maintenant toutes les commandes npm sont lancées.
J'espère que ça aide quelqu'un!
À votre santé
Utilisez la commande suivante pour tuer et redémarrer le serveur de noeud à partir d'un fichier de commandes.
@echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF