如何从Error中释放localhost:listen EADDRINUSE

ada*_*dam 115 windows-7 node.js

我正在测试在Windows 7上用nodejs编写的服务器,当我尝试在命令行中运行测试程序时,我得到以下错误

Error: listen EADDRINUSE
at errnoException (net.js:614:11)
at Array.0 (net.js:704:26)
at EventEmitter._tickCallback (node.js:192:40)
Run Code Online (Sandbox Code Playgroud)

如何在不重新启动的情况下修复它?

小智 164

跑:

ps -ax | grep node
Run Code Online (Sandbox Code Playgroud)

你会得到类似的东西:

60778 ??         0:00.62 /usr/local/bin/node abc.js
Run Code Online (Sandbox Code Playgroud)

然后做:

kill -9 60778
Run Code Online (Sandbox Code Playgroud)

  • 你是如何在Windows上做到的? (9认同)

fen*_*ent 96

这意味着您尝试绑定服务器的地址正在使用中.尝试使用该端口的其他端口或关闭程序.

  • 由于这个单节点程序是我机器上唯一使用端口3000的程序,因此很明显发生了一些事情,以防止我的节点进程的先前实例化正确关闭.当我使用`node app.js`并使用Ctrl + C停止它时它正在工作,但是在我第一次使用`npm start`之后开始出现EADDRINUSE问题,所以看起来真正的解决方案是使用除了使用`npm start`后按Ctrl + C关闭. (7认同)
  • 我做了'ps aux | grep node`,找到进程id(第二列)并简单地用`kill <pid>`杀死它(我的是`kill 18762`). (5认同)
  • 很多时候,这个错误的发生是因为节点进程没有被终止。但有时该端口正被其他进程使用,因此可能难以理解/定位阻塞它的正确进程。下面WolfReporter对这个问题有正确的解决方法!http://stackoverflow.com/a/22875192/36975 (2认同)

小智 38

在Linux上(至少是Ubuntu衍生产品)

killall node
Run Code Online (Sandbox Code Playgroud)

比这种形式更容易.

ps | grep <something>
kill <somepid>
Run Code Online (Sandbox Code Playgroud)

如果你有一个孤儿抱着这个端口,它们都不会起作用.相反,这样做:

netstat -punta | grep <port>
Run Code Online (Sandbox Code Playgroud)

如果端口被保持,你会看到这样的东西:

tcp           0      0.0.0.0:<port>          0.0.0.*       LISTEN     <pid>/<parent>
Run Code Online (Sandbox Code Playgroud)

现在用pid杀死:

kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)


小智 35

以下命令将为您提供正在运行的节点进程列表.

ps | grep node
Run Code Online (Sandbox Code Playgroud)

要释放该端口,请使用以下命令停止该过程.

kill <processId>
Run Code Online (Sandbox Code Playgroud)

  • 正如原始海报写道:"在Windows 7上"...... ;-) (6认同)
  • 一个更好的选择是`pidof node` (4认同)
  • 你可能想添加一个`| grep -v grep`排除`grep`进程. (2认同)

Ben*_*uer 30

您收到错误EADDRINUSE是因为您的应用程序要使用的端口被另一个进程占用.要释放此端口,您需要终止占用过程.

由于您使用的是Windows,因此可以使用命令提示符(cmd)终止进程.cmd您可以使用它来发现阻止应用程序的进程ID(PID).您将需要PID以终止/终止该过程.

这是一个循序渐进的指南......

  1. 查找在指定端口上运行的所有进程(在此示例中,Port为"3000"):

    netstat -ano | 找到":3000"

  2. netstat命令将列出在指定端口上运行的所有进程.在结果的最后一列中,netstat您可以看到PIDs(在此示例中,PID为"8308").您可以PID通过运行以下命令找到有关特定内容的更多信息:

    任务列表/ fi"pid eq 8308"

  3. 如果要终止进程,可以使用以下命令执行PID此操作(在此示例中,PID为"8308"):

    taskkill/pid 8308/f

截图

在此输入图像描述


swa*_*uri 19

当你收到错误错误:听EADDRINUSE,

尝试运行以下shell命令:

netstat -a -o | grep 8080
taskkill /F /PID 6204
Run Code Online (Sandbox Code Playgroud)

grep编辑8080,因为我知道我的服务器正在端口8080上运行.(static当我启动时告诉我:'服务'."在http://127.0.0.1:8080 '.)你可能需要搜索不同的港口.


Aru*_*kar 15

假设您的服务器正在运行 port 3000

lsof -i tcp:3000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    node    11716 arun   11u  IPv6 159175      0t0  TCP *:3000 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

在那之后使用 kill -9 <pid>

在上述情况下 sudo kill -9 11716


小智 12

使用以下命令来终止在某个端口运行的进程 - 在下面的示例中为3000

kill -9 $(lsof -t -i:3000)
Run Code Online (Sandbox Code Playgroud)


ilo*_*loo 7

一个可能对我有用的解决方案就是在浏览器中关闭窗口,我在其中运行相应的" http:// localhost:3000 / "脚本.


Esh*_*raj 6

当你收到错误

错误:听EADDRINUSE

打开命令提示符并键入以下说明:

netstat -a -o | grep 8080
taskkill /F /PID** <*ur Process ID no*>
Run Code Online (Sandbox Code Playgroud)

之后重新启动手机间隙界面.

如果您想知道哪个进程ID正在使用,请打开TASK MANAGER并查看Column标题PID并找到PID no.


小智 5

killall -9帕特里克建议的上述节点按预期工作并解决了问题,但您可能想阅读这个答案的编辑部分,了解为什么kill -9可能不是最好的方法。

最重要的是,您可能希望针对单个进程,而不是盲目地杀死所有活动进程。

在这种情况下,首先获取在该端口上运行的进程的进程 ID (PID)(比如 8888):

lsof -i tcp:8888
Run Code Online (Sandbox Code Playgroud)

这将返回如下内容:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1
Run Code Online (Sandbox Code Playgroud)

(听)然后就做(ps - 实际上不做。请继续阅读下面的内容):

kill -9 57385
Run Code Online (Sandbox Code Playgroud)


sar*_*n3h 5

这适用于 Mac:

步骤1。

sudo lsof -i tcp:3000 (or whatever port you want to kill)
Run Code Online (Sandbox Code Playgroud)

上面的命令将为您提供当前持有该端口的进程 ID。

第2步。

Kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)


Sur*_*mar 5

检查进程ID

须藤lsof -i:8081

比杀死特定的过程

须藤杀-9 925

在此处输入图片说明