这是我第一次使用 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.<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 服务器时,它已经启动了。
所以我想知道,如何停止所有服务器实例?另外,如果您能告诉我如何检测端口上正在运行的内容并杀死它。
最佳答案
Windows 机器:
需要杀死一个 Node.js 服务器,并且您没有任何其他 Node 进程正在运行,您可以告诉您的机器杀死所有名为 node.exe
的进程。看起来像这样:
taskkill /im node.exe
如果进程仍然存在,您可以通过添加 /f
标志来强制终止进程:
taskkill /f /im node.exe
如果你需要更细粒度的控制并且只需要杀死一个运行在特定端口的服务器,你可以使用netstat
找到进程ID,然后向它发送一个kill信号.因此,在您的情况下,端口是 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) 参数即可。
MacOS 机器:
过程几乎相同。您可以杀死机器上运行的所有 Node 进程:
killall node
或者也像 @jacob-groundwater's answer below 中提到的那样使用 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 机器:
同样,该过程几乎相同。您可以杀死机器上运行的所有 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
关于javascript - 停止 node.js 服务器的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790910/