这是我第一次使用Node.js,遇到了这个问题:
我已经通过IDE的插件启动了节点服务器。不幸的是,我无法使用IDE的终端。因此,我尝试从命令行运行脚本。
这是问题所在-我正在使用Express模块,而我的应用正在监听某个端口(8080)。当我从命令行启动应用程序时,它将引发以下错误:
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)
即使我不太确定该错误可能是什么,我仍然认为这是因为该应用程序正在侦听已在使用的端口。所以我做了:
netstat -an
我可以看到
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
这是因为当我尝试从IDE启动Node服务器时,它已经启动了。
所以我想知道,如何停止所有服务器实例?另外,如果您能告诉我如何检测端口上正在运行的内容并杀死它。
需要终止Node.js服务器,并且您没有运行任何其他Node进程,则可以告诉您的计算机终止名为的所有进程node.exe。看起来像这样:
node.exe
taskkill /im node.exe
如果进程仍然存在,则可以通过添加/f标志来强制进程终止:
/f
taskkill /f /im node.exe
如果您需要更细粒度的控制并且只需要终止在特定端口上运行的服务器,则可以使用它netstat来查找进程ID,然后向其发送终止信号。因此,在您的情况下,端口为8080,则可以运行以下命令:
netstat
8080
C:\>netstat -ano | find "LISTENING" | find "8080"
输出的第五列是进程ID:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 14828 TCP [::]:8080 [::]:0 LISTENING 14828
然后,您可以使用终止进程taskkill /pid 14828。如果该进程拒绝退出,则只需将/f(force)参数添加到命令中。
taskkill /pid 14828
这个过程几乎是相同的。您可以杀死计算机上运行的所有Node进程(-$SIGNAL如果SIGKILL不足则使用):
-$SIGNAL
SIGKILL
killall node
或者也可以使用netstat,找到在端口上侦听的进程的PID:
$ netstat -nlp | grep :8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1073/node
在这种情况下,进程ID是第六列中进程名称之前的数字,然后您可以将其传递给kill命令:
kill
$ kill 1073
如果该进程拒绝退出,则只需使用该-9标志,它是一个SIGTERM并且不能被忽略:
-9
SIGTERM
$ kill -9 1073