停止 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.<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 服务器时,它已经启动了。

所以我想知道,如何停止所有服务器实例?另外,如果您能告诉我如何检测端口上正在运行的内容并将其杀死。

原文由 Kiran Ambati 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

视窗机:

需要杀死 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机器:

该过程几乎相同。您可以杀死机器上运行的所有 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机器:

同样,该过程几乎相同。您可以杀死机器上运行的所有 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

原文由 hexacyanide 发布,翻译遵循 CC BY-SA 4.0 许可协议

适用于 Linux、OS X

 killall node

原文由 zag2art 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题