javascript - 停止 node.js 服务器的所有实例

标签 javascript windows node.js express port

这是我第一次使用 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/

相关文章:

javascript - 无法理解 gulp.src() 的行为

javascript - JsonWebToken错误: jwt must be provided

windows - 配置安装程序以在 Windows 启动时启用/禁用启动

javascript - NodeJS + Express 与 Ajax

node.js - 是否有人使用 Node 中的 zip 部署在基于消耗的层中的 Azure 函数中执行函数部署?

windows - Perl 串口访问 [Windows 10]

javascript - 只有某些行有删除按钮?

javascript - 如何获得仅显示小时数的倒计时?

javascript - 我有错误:E/RecyclerView:未连接适配器;跳过布局

c++ - LoadStringW - winuser.h。它有什么作用?