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


182

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

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


1
对不起,我没有提到我在Windows环境中。请发布相关的命令。谢谢
Kiran Ambati 2013年

您也可以在Windows Taskmanager中找到node.js任务。找到名称为Node.js:Server-side的进度,并打开其详细信息,您将找到您的nodejs进度的pid和详细信息
Xiuying Lan

这是为我工作的一种:superuser.com/questions/1183057/…–
未知

Answers:


417

Windows机器:

需要终止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(force)参数添加到命令中。


Linux机器:

这个过程几乎是相同的。您可以杀死计算机上运行的所有Node进程(-$SIGNAL如果SIGKILL不足则使用):

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

1
对不起,我到底该如何使用这些命令?process.exit()可能在代码中?但是服务器已经启动。它可能是从命令节点app.js开始的,而不是从node-dev app.js开始的。而且“节点killall”无法正常工作。我做错了吗?谢谢
Kiran Ambati 2013年

1
process.exit()在您的应用程序中导致NodeJS实例关闭。killall node在bash中将杀死您的计算机上运行的所有NodeJS实例。
六氰化物

谢谢@hexacyanide。我在Windows上进行开发。是否会使killall节点成为无效命令,因为我无法从命令行使用它。
基兰·安巴蒂

2
尝试taskkill /IM node.exe。它将杀死名为的所有进程node.exe

1
我必须使用taskkill / F / IM node.exe使其工作,谢谢!
路易斯,

75

最快的方法是

killall node

适用于Linux,OS X


简单的方法,但是如果正在运行任何其他应用程序,则我们必须更加具体。
拉杰夫·乌普巴拉

对我不起作用。node: no process found同样,当我为在特定端口上运行的节点进程进行grep时,进程ID -本身就具有数字,而不是数字。
Giorgi Gvimradze

49

您可以使用lsofget绑定到所需端口的进程。

不幸的是,这些标志似乎因系统而异,但是在Mac OS X上,您可以运行

lsof -Pi | grep LISTEN

例如,在我的机器上,我得到如下信息:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

第二个数字是PID,他们正在侦听的端口在“(LISTEN)”之前。找到流氓PID并kill -9 $PID以极端的偏见终止。


嗨,Jacob,您可以编辑答案并添加Windows版本,因为我正在Windows上进行开发。谢谢
Kiran Ambati 2013年

抱歉,我不知道如何在Windows上执行此操作。
2013年

这是一个很好的答案,尤其是当在不同端口上运行多个节点服务器时。我可以轻松地区分每个端口上运行的进程ID。
modulitos

24

Windows和GitBash终端 我需要在Windows / Webstorm / GitBash终端内使用此命令

cmd "/C TASKKILL /IM node.exe /F"

2
这是为我做的。谢谢
Adim Victor

16

如果要终止特定的节点进程,可以转到命令行route并键入:

ps aux | grep node

获取所有节点进程ID的列表。现在您可以获取进程ID(pid),然后执行以下操作:

kill -9 PID

如果要杀死所有节点进程,请执行以下操作:

killall -9 node

-9开关就像Windows上的最终任务。它将迫使该过程结束。你可以做:

kill -l

查看kill命令的所有开关及其注释。


8

您可以尝试以下方法:

taskkill /IM node.exe -F

7

的Linux

打动你的朋友

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

但这是你会记得的那个

killall node


2

如果您使用的是Windows,请按照以下步骤操作:

  1. 打开任务管理器,寻找以下过程: 任务管理器显示Node进程-Node.js服务器端JavaScript

  2. 然后只需右键单击并“结束任务”即可。

  3. 就是这样,现在所有npm命令都从头开始运行。



1

你可以试试

killall node

你也可以尝试

killall nodejs

这些命令已经多次发布。可以再次发布它们,但是您至少应该在答案中添加更多解释,以便其他人可以从中学习
Nico Haase



0

使用以下命令从批处理文件中杀死并重新启动节点服务器

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.