停止所有的node.js服务器实例。
停止所有的node.js服务器实例。
这是我第一次使用Node.js工作,我遇到了这个问题:
我通过IDE插件启动了一个Node服务器。不幸的是,我无法使用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. (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服务器已经启动。
所以我想知道,我如何停止所有服务器实例?如果您可以告诉我如何检测正在运行的端口并终止它。
Windows机器:
需要关闭一个Node.js服务器,没有其他Node进程运行,你可以命令你的机器关闭所有名称为node.exe
的进程,语法如下:
taskkill /im node.exe
如果进程还在,你可以强制进程终止,通过添加/f
参数:
taskkill /f /im node.exe
如果你需要更精细的控制,并且只需要关闭运行在特定端口上的服务器,则可以使用netstat
查找进程ID,然后向其发送终止信号。在这种情况下,端口是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
(强制)参数。
MacOS机器:
该过程与Windows机器几乎相同。你可以杀死在该机器上运行的所有Node进程:
killall node
或者,如下面@jacob-groundwater的答案所示,使用lsof
来查找正在监听端口的进程的PID(通过传递-i
标志和端口,可以大大加快速度):
$ lsof -Pi :8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 1073 urname 22u IPv6 bunchanumbershere 0t0 TCP *:8080 (LISTEN)
在这种情况下,进程ID是PID列下面的数字,你可以将其传递给kill
命令:
$ kill 1073
如果进程拒绝退出,那么使用-9
标志,这是一个SIGTERM
信号,不能被忽略:
$ kill -9 1073
Linux机器:
同样,该过程与Windows和MacOS机器几乎相同。你可以在机器上杀死所有Node进程(如果SIGKILL
不够,使用-$SIGNAL
):
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 1073
如果进程拒绝退出,那么使用-9
标志,这是一个SIGTERM
信号,不能被忽略:
$ kill -9 1073