停止节点.js服务器的所有实例

2022-08-30 00:18:15

这是我第一次使用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服务器时,它已经启动。

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


答案 1

视窗机:

需要杀死一个 Node.js 服务器,并且你没有运行任何其他 Node 进程,你可以告诉你的机器杀死所有名为 .这看起来像这样:node.exe

taskkill /im node.exe

如果进程仍然存在,您可以通过添加标志来强制终止进程:/f

taskkill /f /im node.exe

如果需要更细粒度的控制,并且只需要杀死在特定端口上运行的服务器,则可以使用来查找进程 ID,然后向其发送终止信号。因此,在您的情况下,端口位于 ,您可以运行以下命令:netstat8080

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

然后,您可以使用 终止进程。如果进程拒绝退出,则只需将(force)参数添加到命令中即可。taskkill /pid 14828/f


MacOS 机器:

该过程几乎完全相同。您可以终止计算机上运行的所有 Node 进程:

killall node

或者,正如下面@jacob地下水的答案中提到的那样,您可以使用,找到在端口上侦听的过程的PID(传递标志和端口以显着加快速度):lsof-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

如果进程拒绝退出,则只需使用标志,这是一个并且不能忽略:-9SIGTERM

$ kill -9 1073

Linux 机器:

同样,该过程几乎完全相同。您可以终止计算机上运行的所有 Node 进程(如果操作不充分,请使用):-$SIGNALSIGKILL

killall node

或者也使用 ,您可以找到在端口上侦听的进程的 PID:netstat

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

在这种情况下,进程 ID 是第六列中进程名称前面的数字,然后可以将其传递给命令:kill

$ kill 1073

如果进程拒绝退出,则只需使用标志,这是一个并且不能忽略:-9SIGTERM

$ kill -9 1073

答案 2

适用于 Linux、OS X

killall node