884

我有一个使用connect在node.js中运行的简单服务器:

var服务器=require('connect').createServer();//操作。。。服务器侦听(3000);

在我的代码中,我有实际的路由处理程序,但这是基本思想。我一直收到的错误是:

EADDRINUSE,地址已在使用中

我收到这个错误时,再次运行我的应用程序后,它以前崩溃或错误。因为我没有打开终端的新实例,所以我用ctrl+z键.

我相当肯定我所要做的就是关闭服务器或连接。我试着打过电话server.close()在里面process.on(“退出”,…);运气不好。

12
  • 61
    实际上,不是Ctrl+z键你应该使用Ctrl+c组合键它将通过发送SIGQUIT正确关闭程序:)请参阅维基更多详细信息:) 评论 2011年11月14日8:14
  • 2
    你是说SIGINT。SIGQUIT是由于`ctrl+\` 评论 2012年2月27日1:51
  • 100
    尝试pkill节点pkill节点如果在类UNIX操作系统上
    – 杰拉德
    评论 2013年11月20日21:24
  • 2
    我也遇到了类似的问题,找到了这个包,当你按下CTRL+C时,它可以让你干净地退出:npmjs.com/package/exit-hook
    – 爵士乐
    评论 2017年7月31日17:55
  • 4
    重启电脑是一个糟糕的解决方案。 评论 2020年2月17日19:44

60个答案60

重置为默认值
942

首先,您想知道正在使用哪个进程端口3000

sudo lsof-i:3000

这将列出所有PID(PID)一旦您拥有PID(PID)您可以通过以下方式终止它:

杀死-9<PID>

在哪里更换<PID>通过进程ID或进程ID列表显示上一个命令输出。

16
  • 52
    此命令清楚地标识PID,与ps aux | grep节点我也不需要苏多 评论 2018年1月15日14:20
  • 10
    这是最好的答案。我使用8081端口,使用React Native和纱线,效果很好。 评论 2020年3月4日18:51
  • 1
    这对我来说很有用。我可以识别端口3000的使用位置并将其关闭。我也不需要苏多.
    – 坎帕洛
    评论 2020年3月12日15:16
  • 4
    很好。我在接到命令后也试过了killall-9{命令}例如killall-9节点 评论 2020年4月22日7:38
  • 2
    使用特定端口查找进程的命令非常有用。很高兴你发布了这个。 评论 2020年11月6日14:44
660

您还可以使用命令行路径:

ps aux|grep节点

以获取进程id。

然后:

杀死-9 PID

在kill上执行-9会发送SIGKILL(而不是SIGTERM)。SIGTERM有时会被节点忽略。

9
  • 2
    ps aux | grep节点没有显示任何内容;仍然textareaserver--editor-cmd='gvim-f'失败:3月14日21:19:30-socket.io就绪-接受连接现在可以启动服务器:EADDRINUSE,地址已在使用中 评论 2011年3月14日14:21
  • 147
    为什么不是这样killall-9节点 评论 2013年11月27日10:43
  • 37
    我用了很长时间这个答案,为了方便起见,有一天我把它写成了一行。。此命令将终止在给定端口(本例中为8000)上运行的任何进程:lsof-n-i4TCP:8000 | grep LISTEN | tr-s“”| cut-f 2-d“”|xargs kill-9 评论 2016年1月11日16:57
  • 我有多个节点服务器同时运行,其中一些是Electron应用程序。我不得不使用杀死使用特定进程id而不是基勒.
    – 郁金香
    评论 2019年1月5日22:20
  • 1
    就像PSA一样:由于许多服务都使用Electron,所以要非常小心您要杀死的内容,您可能会无意中杀死一个不相关的进程。 评论 2019年11月19日9:08
303

我在运行win8的笔记本电脑上碰到了这个。这起到了作用。

以“管理员”身份运行cmd.exe:

C: \Windows\System32>taskkill/F/IM节点.exe成功:PID为11008的进程“node.exe”已终止。
7
  • 1
    我从命令窗口运行它,意外地关闭了它。Node一直在后台运行。。。(即使在会话终止后)。在我的情况下,一旦我关闭了通过网络插座连接到它的浏览器选项卡,它最终就终止了。 评论 2015年5月11日4:28
  • 27
    taskkill/F/IM节点.exe从任何目录在Windows上对我来说都很有吸引力:-)谢谢分享!! 评论 2015年6月23日23:36
  • 5
    这是我能验证的唯一一个适用于windows的单行解决方案 评论 2016年9月6日21:12
  • 8
    适用于windows 10。顺便说一句,我不必以管理员身份运行cmd.exe。 评论 2017年7月18日10:49
  • 2
    这是最好的答案。其他人给了我“无法识别的命令”。这很管用。 评论 2021年8月17日4:52
181

进程.on('exit',..)如果进程崩溃或被终止,则不调用。它仅在事件循环结束时调用,因为server.close() 某种程度上结束事件循环(它仍然需要到处等待当前正在运行的堆栈)将其放入退出事件中是没有意义的。。。

撞车时,做process.on('uncaughtException',..)和关于杀人的事进程.on('SIGTERM',..)

也就是说,SIGTERM(默认终止信号)让应用程序进行清理,而SIGKILL(立即终止)则不让应用程序执行任何操作。

1
  • 6
    它也是非常有用的挂接process.on('SIGINT',…)
    – 法林茨
    评论 2015年10月16日14:00
150

使用以下命令检查PID,即端口3000上运行的进程的id:

lsof-i tcp:3000

它将输出如下内容:

命令PID用户FD类型设备尺寸/关闭节点名称节点5805 xyz 12u IPv6 63135 0t0 TCP*:3000(LISTEN)

现在使用以下命令终止进程:

杀死-9 5805
  • 如果我使用lost,就没有输出。这是否意味着该部分没有流程?
    – x89像素
    评论 2020年1月23日9:04
  • 2
    不要使用杀死-9除非你知道自己在做什么。基本上,试试看终止PID杀死-2 PID杀死-15 PID等一下,如果这个过程还在继续,然后拿出那把大枪。无条件终止进程不会让它进行任何清理,这可能会导致文件句柄泄漏和竞争条件等,或者导致“地址已在使用中”。
    – 三元组
    评论 2021年1月15日5:43
  • lsof没有输出。。。但问题依然存在。
    – 贾斯库
    评论 2021年7月13日20:34
123

对于macOS蒙特雷(12.0):

苹果在macOS Monterey上对AirPlay进行了一些更改。现在,它使用5000和7000个端口。如果您在项目中使用这些端口,则需要禁用此功能。

系统首选项>共享>取消选中AirPlay接收器


对于macOS文丘拉(13.0)及以上用户:

系统设置>常规>禁用AirPlay接收器

2
  • 好朋友,只要在MacOS Ventura中寻找“接收器”,因为界面发生了变化 评论 2023年3月19日23:42
  • 不用说,我们还可以使用不同的端口并保持启用该功能;-) 评论 3月3日9:28
103

我找到了这个解决方案,试试看授予使用权限苏多

sudo-pkill节点
1
90

我通常使用

npx kill-port 3000

或者在我的mac上。

killall节点
1
  • 如果您执行killall节点,则很可能还会杀死为实例反应应用程序运行的nodejs实例。
    – 亨德
    评论 2023年9月4日17:52
47

正在重写@杰拉德的评论在我的回答中:

尝试pkill节点pkill节点如果启用类UNIX操作系统。

这将终止在任何端口上运行节点服务器的进程。为我工作。

0
42

Linux操作系统

运行并确定节点进程的PID。

然后,跑sudo kill PID

窗户

使用任务列表显示正在运行的进程的列表:

任务列表/O

然后,像这样终止节点进程(使用从任务列表命令):

taskkill/pid pid
40

对于windows,打开任务管理器并查找node.exe进程。用End Task杀死所有人。

在此处输入图像描述

2
  • 更新:“Node.js JavaScript Runtime”的End Task已足够 评论 2021年7月31日11:56
  • 这已经11年了,仍然很有用,这是windows的最佳解决方案。 评论 2021年12月20日22:45
37

下面是一个一行程序(用端口或配置变量替换3000):

杀死$(lsof-t-i:3000)
1
  • 杀死$(lsof-t-i:8080)在与Mongo一起运行Node.js Express应用程序时为我工作过。
    – 赖安
    评论 2022年10月24日17:27
23

我曾经遇到过这个错误,并在这里使用了许多方法。

我的问题是我有两个app.listen(3000);调用相同的app.js脚本。第一个app.listen()成功了,第二个app.linsten()抛出了错误。

我遇到的另一个帮助我调试的有用命令是sudo fuser-k 3000/tcp这将杀死您可能启动的任何恶意进程(某些进程可能会重新启动,例如,如果使用forever.js运行,但它对我很有用)。

1
  • 这里同样的问题。。。奇怪的是,它在调试中正常工作,而运行时却出现了这个错误npm启动
    – 阿斯坎
    评论 2019年3月11日18:15
22

对于Visual Studio Noobs像我一样

您可能正在其他终端中运行该进程!

之后关闭终端在Visual Studio,航站楼只是消失.

手动创造了一个新的,认为前一个被摧毁了。事实上,每次我点击新建油库实际上我是创建一个新的在之前的基础上.

所以我找到了第一个航站楼。。。瞧,我正在那里运行服务器。

多个终端,但未重新配置

0
22

Windows(按命令)

1/2. 搜索=>写入cmd=>打开node.js命令提示符

在此处输入图像描述


2/2. 运行windows命令:结束进程

结束一个或多个任务或进程。

taskkill/f/im节点.exe

/(f)-强制已结束

/国际货币基金组织-指定要终止的进程的映像名称。

节点.exe-可执行文件

在此处输入图像描述

Windows-任务管理器手动

此命令与转到任务管理器在“详细信息”选项卡下选择节点任务(整洁在我看来)。

在此处输入图像描述

而且结束任务

在此处输入图像描述

Visual studio

有时有多个终端/任务(客户端/服务器等)。选择并关闭ctrl+c.

在此处输入图像描述

0
20

您可能会遇到这样的情况,即使终止线程或进程也不会真正终止应用程序(在Linux和Windows上,这种情况偶尔会发生)。有时,您可能已经有一个未关闭的实例在运行。

由于这种情况,我更愿意增加我的package.json包:

“脚本”:{“stop-win”:“Taskkill/IM node.exe/F”,“stop-linux”:“killall节点”},

然后,我可以使用以下方式呼叫他们:

npm运行止动翼npm运行停止-Linux

如果需要的话,可以使用fancier命令,并使用参数标志生成那些BIN命令。您还可以将它们添加为要在try-catch子句中执行的命令。

20

真的很简单,对于所有操作系统。。

npx kill-port 3000

尽管您的问题如上所述,但您需要捕捉节点退出的不同方式,例如

process.on('uncaughtException',(err,origin)=>{console.log(错误);});//插入其他处理程序。
18
ps aux | grep节点kill-9[PID](由上述命令提供)

描述:


  1. ps将给出进程状态,aux提供a:所有用户进程,u:用户自己的进程,x:所有其他未连接到终端的进程的列表。
  2. 管道符号:将传递ps-aux的结果以进行进一步操作。
  3. grep将从ps-aux提供的列表中搜索所提供的字符串(在我们的示例中是节点)。
1
  • 不要使用杀死-9除非你知道自己在做什么。基本上,试试看终止PID杀死-2 PID杀死-15 PID并等待一段时间,如果该过程仍然存在,然后拿出那把大枪。无条件终止进程不会让它进行任何清理,这可能会导致文件句柄泄漏和竞争条件等,或者导致“地址已在使用中”。
    – 三人组
    评论 2021年1月15日5:42
17

仅供参考,您可以在一个命令中终止进程sudo fuser-k 3000/tcp这可以用于所有其他端口,如通常用于开发的8000、8080或9000。

16

首先找出正在运行的内容:

sudo lsof-nP-i4TCP:3000|grep LISTEN

您将得到如下内容:

php-fpm 110根6u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000(LISTEN)php-fpm 274_www 0u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000(侦听)php-fpm 275_www 0u IPv4 0x110e2ba1cc64b26d 0t0 TCP 127.0.0.1:3000(侦听)

然后可以按以下方式终止进程:

须多杀110

然后,您将能够运行而不会收到listen EADDRINUSE:::3000错误

1
  • 我正在使用nodemon,它会重新启动服务。他们有办法杀死nodemon吗?
    – 素数xy
    评论 2019年11月30日22:38
15
bash$sudo netstat-ltnp | grep-w“:3000”-tcp6 0 0:::4000::*LISTEN 31157/节点猛击$kill 31157
14

PowerShell用户:

Taskkill/IM节点.exe/F

13

针对Windows用户的UI解决方案:我发现最重要的答案对我来说不起作用,它们似乎是针对Mac或Linux用户的命令。我找到了一个不需要任何命令就能记住的简单解决方案:打开任务管理器(ctrl+shift+esc)。查看正在运行的后台进程。找到任何Node.js并结束任务。

在我这样做之后,这个问题就消失了。正如其他答案中所说,后台进程仍在运行,因为之前遇到了错误,并且没有调用常规的退出/清理函数,所以杀死它们的一种方法是在任务管理器中找到进程并在那里杀死它。如果您从终端/powerShell运行进程,通常可以使用ctrl+c来终止它。

0
9

任务管理器(ctrl+alt+del)->

进程选项卡->

选择“node.exe”进程并点击“End process”

2
  • 如果要终止节点端口进程,为什么要终止整个节点进程。 评论 2016年10月1日22:12
  • 这没有意义,没有单独的过程来保持端口节点进程访问不同的端口,或者根本没有,你必须挑出一个保持端口的进程;但它仍然只是一个节点过程。
    – 三人组
    评论 2021年1月15日5:46
9

以防万一,请检查是否添加了此行倍数错误的次数

app.listen(3000,函数(){console.log('在3000上列出')});

上面的代码是用于快速的,但只需检查您是否尝试在代码中使用同一端口两次。

8

在Windows上,我收到以下错误:

EADDRINUSE:地址已在使用中:::8081。

遵循以下步骤:

  • 以管理员身份打开CMD
  • 运行以下内容

命令netstat-ano|findstr“PID:8081”

获得了以下进程:

在此处输入图像描述

通过以下方式杀死它:

taskkill/pid 43144/f

在此处输入图像描述

在MAC上,您可以这样做:

raghavkhunger@MacBook-Air~%lsof-i tcp:8081命令PID用户FD类型设备尺寸/关闭节点名称节点23722用户名24u IPv6 0xeed16d7ccfdd347 0t0 TCP*:sunproxyadmin(LISTEN)

用户名@MacBook-Air~%杀死-9 23722

7

在windows用户中:打开任务管理器结束任务这个节点js.exe文件,工作正常。

5

鉴于表格中的所有答案,我想补充一点。

我发现,当我使用Ctrl+Z错误地终止一个节点应用程序时,就在我下次尝试打开它时,也出现了同样的错误EADDRINUSE。

当我使用Ctrl+C终止一个节点应用程序时,下次打开它时,它没有出现任何问题。

将端口号更改为错误端口号以外的其他端口号解决了问题。

2
  • 1
    Ctrl+C是正确的。我使用了与以前相同的端口号,它和以前一样工作。 评论 2017年6月10日2:57
  • <key>Ctrl-Z</key>不会停止进程。它将其置于后台,以便您可以运行其他命令。这是一个Unix外壳。要继续此过程,请使用前景在同一个控制台中。在命令行中键入各种命令后,您可以看到服务器中发生了什么。 评论 2019年1月18日2:24
5

使用netstat获取所有节点进程及其使用的端口,然后通过PID杀死唯一需要的进程

netstat-lntp | grep节点

您将获得所有节点进程

tcp6 0 0:::5744:::*LISTEN 3864/节点

然后当您得到PID(3864)时,只需通过PID终止进程

kill-HUP PID
5

如果您是windows用户,只需转到任务管理器并结束节点js的所有任务即可在此处输入图像描述

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.