当前位置: 首页 > 知识库问答 >
问题:

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

张华池
2023-03-14

这是我第一次使用Node.js,我遇到了这个问题:

我已经通过一个IDE的插件启动了一个节点服务器。不幸的是,我不能使用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启动节点服务器时,它已经启动了。

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

共有2个答案

薛彭薄
2023-03-14

最快的方法是

killall node

适用于Linux、OS X

祁均
2023-03-14

需要杀死一个Node.js服务器,而您没有任何其他节点进程在运行,您可以告诉您的机器杀死所有名为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(force)参数添加到命令中。

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

killall node

或者正如@jacob-glowatraw在下面使用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

同样,这个过程几乎是相同的。您可以终止计算机上运行的所有节点进程(如果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
 类似资料:
  • 问题内容: 这是我第一次使用Node.js,遇到了这个问题: 我已经通过IDE的插件启动了节点服务器。不幸的是,我无法使用IDE的终端。因此,我尝试从命令行运行脚本。 这是问题所在-我正在使用Express模块​​,而我的应用正在监听某个端口(8080)。当我从命令行启动应用程序时,它将引发以下错误: 即使我不太确定该错误可能是什么,我仍然认为这是因为该应用程序正在侦听已在使用的端口。所以我做了:

  • 本文向大家介绍Powershell获取系统中所有可停止的服务,包括了Powershell获取系统中所有可停止的服务的使用技巧和注意事项,需要的朋友参考一下 适用于PS3.0及以后版本。 Get-Service能够显示你电脑上所有已安装的服务。可是没有哪个参数是获取仅运行或停止的服务。 配合简单的Where-Object语句,才可以解决这个问题。通常代码如下: 基本上,Where-Object可以获

  • 问题内容: 我显然正在运行一个实例,因为当我尝试通过输入来启动新服务器时,遇到了以下问题: 我不知道如何停止此服务器并启动新服务器。 在CLI中键入命令时,可以追加任何命令吗? 我的操作系统是Ubuntu 10.04。 问题答案: 连接到节点实例并使用shutdown命令,或者如果您在ubuntu上,则可以尝试通过init.d重新启动Redis服务器: 或停止/启动它: 在Mac上

  • 问题内容: 我已经到了秃顶几步之遥… 我正在尝试运行一项服务,该服务将检查我工作中的服务器是否正在运行。应该每5分钟执行一次。 我经历过TimerTask,ScheduledExecutorService,最后是Handler。他们都工作了好几个小时,除了一些不准确的地方外,还有1-5分钟的时间,然后突然,“计时器”就停止了发射。 现在,我已经了解到,如果Scheduler遇到未捕获的异常,它将停

  • 问题内容: 我一直在使用Tornado Web服务器进行一些测试, 并且到了要停止Web服务器的地步(例如在单元测试期间)。龙卷风网页上存在以下简单示例: 一旦被调用,它将阻塞程序(或当前线程)。读取所述源代码的对象给出了文档在这个例子中功能: 但是,我不知道如何将其集成到我的程序中。其实我有一个封装(有它自己的Web服务器类和函数),但只要我打电话开始,程序(或测试)过程块会反正。 我试图在另一

  • 我正在使用插件Goup-server-li的负载。 如何停止服务器? 我尝试了server.restart(),server.kill(),server.reset() 但总是有这样的错误: 未捕获错误:在Object.exports处侦听EADDRINUSE 127.0.0.1:35729_导出时出现errnoException(util.js:1022:11)_服务器上的exceptionWi