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

我想知道,如何停止所有服务器实例?还有,如果你能告诉我如何检测端口上运行的程序并关闭它。

577419 次浏览

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)参数。


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

您可以使用lsof获取已绑定到所需端口的进程。

不幸的是,不同系统的标志似乎不同,但在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以极端偏见终止。

你可以试试这个:

taskkill /IM node.exe -F

适用于Linux, OS X

killall node

你也可以试试:

killall nodejs

我使用windows操作系统。

我杀死了所有的节点进程,并重新启动应用程序,它工作。

试一试

taskkill /im node.exe

<强>窗口,GitBash终端 我需要在Windows / Webstorm / git终端中使用这个命令

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

按cmd或bash: Ctrl + C

如果你想杀死一个特定的节点进程,你可以进入命令行route并输入:

ps aux | grep node

获取所有节点进程id的列表。现在可以获得进程id(pid)了 做的事:< / p >

kill -9 PID

如果你想杀死所有的节点进程,那么执行:

killall -9 node

-9开关就像windows上的结束任务。它会迫使整个过程结束。 你可以这样做:

kill -l

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

如果你使用的是Windows,请遵循以下步骤:

  1. 打开任务管理器,查看这个进程: 任务管理器显示节点进程- Node.js服务器端JavaScript < / p >

  2. 然后右键单击“;结束任务”;它。

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

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

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

输入命令blow:

Taskkill /f /im node.exe

多平台、稳定、最佳解决方案:

使用fkill杀死占用你端口的进程:

fkill -f :8080

安装fkill使用命令:NPM I -g fkill

你可以试试

killall node

你也可以试试

killall nodejs

Linux

给你的朋友留下深刻印象

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

但这是你会记住的

killall node

它在Windows 10上运行良好

taskkill /f /im node.exe

因为你指定了Windows。如果您希望在bat文件中包含此文件,则可能不希望在进程未运行时生成错误。

因此,为了防止“错误:进程”node.exe"没有找到。",您可以添加一个过滤器:

TASKKILL /F /IM node.exe /FI "PID gt 0"

lsof -Pi :number-of-port例如3000

然后在你的终端上会出现这样的东西

COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
node    26476 node   30u  IPv6 63828225      0t0  TCP *:3000 (LISTEN)

kill PID-NUMBER-YOU-WANNA-KILL

< p >如 kill 26476 < / p >

PID代表进程号