Node.js Node/Express:EADDRINUSE,地址已在使用中-Kill server

Node.js Node/Express:EADDRINUSE,地址已在使用中-Kill server,node.js,Node.js,我在node.js中使用connect运行了一个简单的服务器: var server = require('connect').createServer(); //actions... server.listen(3000); 在我的代码中,我有实际的处理程序,但这是基本思想。我一直遇到的问题是 EADDRINUSE, Address already in use 在应用程序先前崩溃或出现错误后再次运行时,我收到此错误。因为我没有打开terminal的新实例,所以我用ctr+z结束了这个过程

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

var server = require('connect').createServer();
//actions...
server.listen(3000);
在我的代码中,我有实际的处理程序,但这是基本思想。我一直遇到的问题是

EADDRINUSE, Address already in use
在应用程序先前崩溃或出现错误后再次运行时,我收到此错误。因为我没有打开terminal的新实例,所以我用ctr+z结束了这个过程

我相当确定我所要做的就是关闭服务器或连接。我尝试调用server.close-in-process.on'exit'。。。;没有运气。

Linux 运行ps并确定节点进程的PID

然后,运行sudo kill PID

窗户 使用tasklist显示正在运行的进程的列表:

tasklist /O
然后,使用从tasklist命令获得的PID,像这样终止节点进程:

进程。在“退出”时。。如果进程崩溃或被终止,则不会调用。它只在事件循环结束时被调用,而且由于server.close某种程度上结束了事件循环,它仍然需要在这里和那里等待当前正在运行的堆栈,因此将其放在退出事件中是没有意义的

在崩溃时,执行进程。在“未捕获异常”时。。在kill-do过程中,在“SIGTERM”中


也就是说,SIGTERM default kill signal允许应用程序清理,而SIGKILL immediate termination不允许应用程序执行任何操作。

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

ps aux | grep node
获取进程ID

然后:

在kill上执行-9将发送SIGKILL而不是SIGTERM。
SIGTERM有时会被node忽略。

node正在内存中的某个位置运行,并且该端口已锁定。在Windows上,这个问题会发生,就像大多数Windows问题一样,可以通过按CTRL+ALT+DEL和/或重新启动来解决。

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

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

C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.

您可以使用热节点来防止服务器崩溃/运行时错误。只要节点程序[source]/process[running node program]发生更改,Hot node就会自动为您重新启动nodejs应用程序

使用全局选项使用npm安装热节点:

npm安装-g热节点


我曾经犯过这样的错误,在这里我采用了很多方法

我的问题是我有两个app.listen3000;在同一app.js脚本中调用。第一个app.listen成功,第二个抛出错误


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

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

流程选项卡->


选择node.exe进程和hit-End进程

FYI,您可以通过一个命令sudo fuser-k 3000/tcp杀死该进程。这可以用于开发中常用的所有其他端口,如8000、8080或9000。

我找到了此解决方案,请尝试 允许使用sudo


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

我发现,当我使用Ctrl+Z错误地终止一个节点应用程序时,下一次尝试打开它时,也会遇到同样的错误

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


将端口号更改为非错误端口号解决了问题。

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

这将列出此端口上侦听的所有PID,一旦有了PID,您可以使用以下命令终止它:

kill -9 {PID}
PowerShell用户:

Taskkill/IM node.exe/F


以防万一,检查您是否多次错误地添加此行

app.listen(3000, function() {
  console.log('listening on 3000')
});
以上代码适用于express,但只需检查代码中是否尝试两次使用同一端口。

在Linux上

向~/.bashrc添加函数:

函数killTcpListen{ kill-9$lsof-sTCP:LISTEN-i:$1-t } 拉动更改:source~/.bashrc


并使用它:killTcpListen 3000

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

lsof -i tcp:3000
它将输出如下内容:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NODE NAME
node     5805  xyz    12u  IPv6  63135    0t0     TCP  *:3000 (LISTEN)
现在使用以下命令终止进程:

kill -9 5805

Win10、git bash v2.15、节点v8.9.1、npm v5.5.1

我有一个package.json脚本来启动node:start:node index.js

每当我使用它时,不管我是否用ctrl+c终止它,我都会遇到这个问题

如果我只是从gitbash运行node index.js,而不是从npm run start运行,并使用ctrl+c终止,那么我从未遇到过这个错误


我不知道为什么,但我想这可能会对某些人有所帮助。

这里有一个用端口或配置变量替换3000的单行程序:

kill $(lsof -t -i:3000)

首先,使用以下命令了解正在运行的内容:

sudo lsof -nP -i4TCP:3000 | grep LISTEN
您将得到如下结果:

php-fpm 110 root    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 (LISTEN)
php-fpm 275 _www    0u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)
然后,您可以按如下方式终止该进程:

sudo kill 110

然后,您将能够在不获取listen eaddrinue::3000错误的情况下运行windows open Task Manager和find node.exe进程。用末端Ta杀死所有人 sk

对于像我这样的VisualStudioNoobs

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

在Visual Studio中关闭终端后,终端将消失

我手动创建了一个新的,认为前一个已经被破坏了。实际上,每次我点击新的终端时,我实际上是在以前的终端之上创建一个新的终端

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


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

由于这些情况,我更喜欢在我的package.json中添加:

然后,我可以使用以下方式给他们打电话:

npm run stop-win
npm run stop-Linux
如果需要,您可以使用fancier,并使用参数标志生成这些BIN命令。您还可以将这些作为要在try-catch子句中执行的命令添加

ps aux | grep node
kill -9 [PID] (provided by above command)
说明:

ps将给出进程状态,aux提供a:所有用户进程、u:用户自己的进程、x:未连接到终端的所有其他进程的列表。 管道符号:|将通过ps aux的结果进行进一步操作。 grep将从ps aux提供的列表中搜索本例中提供的字符串节点。
针对Windows用户的UI解决方案:我发现最重要的答案对我来说并不适用,它们似乎是针对Mac或Linux用户的命令。我找到了一个不需要记住任何命令的简单解决方案:打开任务管理器ctrl+shift+esc。查看正在运行的后台进程。找到Node.js并结束任务

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

在windows用户:打开任务管理器并结束任务nodejs.exe文件,它工作正常。

在我的回答中重写:

如果在类似UNIX的操作系统上,请尝试使用pkill nodejs或pkill node

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

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

bash$ sudo netstat -ltnp | grep -w ':3000'
 - tcp6    0      0 :::4000      :::*        LISTEN      31157/node      

bash$ kill 31157
EADDRINUSE:地址已在使用中:::8081

遵循以下步骤:

以管理员身份打开CMD 运行以下命令 命令netstat-ano | findstr PID:8081

获得以下过程:

tasklist /O
通过以下方式杀死它:

taskkill/pid 43144/f

在MAC上,您可以这样做:

raghavkhunger@MacBook-空气~%lsof-i tcp:8081 命令PID用户FD类型设备大小/关闭节点名称 节点23722用户名24u IPv6 0xeed16d7ccfdd347 0t0 TCP*:sunproxyadmin侦听

username@MacBook-Air~%kill-923722在Linux中尝试

pkill nodejs 
//or 
pkill node
Windows by Cmd 1/2。搜索=>write cmd=>open node.js命令提示符

2/2。运行windows命令:

结束一个或多个任务或过程

/f-部队结束

/im-指定要终止的进程的映像名称

node.exe-可执行文件

Windows-由任务管理器手动执行 此命令与转到“详细信息”选项卡下的“任务管理器”相同&我认为选择“节点任务”

并结束任务

Visual studio 有时有多个终端/任务客户端/服务器等。 选择并按ctrl+c组合键关闭


ps aux | grep节点不显示任何内容;仍然textareaserver-editor cmd='gvim-f'失败:14 Mar 21:19:30-socket.io就绪-接受连接现在可以启动服务器:EADDRINUSE,地址已在使用中为什么这而不是killall-9 nodeI长期使用此答案,然后有一天为了方便将其组合成一行。。在本例中,此命令将终止在给定端口8000上运行的任何进程:lsof-n-i4TCP:8000 | grep LISTEN | tr-s“”| cut-f 2-d“”| xargs kill-9I一次运行多个节点服务器,其中一些是电子应用程序。我不得不使用特定进程id的just kill,而不是killall。就像PSA一样:要非常小心你要杀死的东西,因为许多服务使用Electron,你可能会无意中杀死一个不相关的进程。实际上,您应该使用Ctrl+c而不是Ctrl+z,Ctrl+c将通过发送SIGQUIT正确关闭程序:有关更多详细信息,请参阅:您的意思是SIGINT。SIGQUIT是由于'ctrl+\'而导致的,如果在类似于UNIX的OSI上出现类似问题,并发现此包允许您在ctrl+C:1时完全退出,请尝试pkill nodejs或pkill node。端口上似乎有一个挂起的或死的进程ID,因此基于节点的服务没有启动并抛出error port IN USE error ADDRESS IN USE 2。我们正在尝试找出如何在不重新启动服务器的情况下释放端口10000。pm2是一个更好的选择。更强大,更多选择。而且没有

他说,作为一个永远的根源,他会遇到问题。@Lucas你说的永远的根源是什么?不幸的是,由于一些许可证的废话,我不得不在工作的产品上永远使用pm2,而不是pm2,这让我非常担心!我从命令窗口运行它,意外地关闭了它。节点一直在后台运行。。。即使在会议结束之后。在我的例子中,一旦我关闭了通过web套接字连接到它的浏览器选项卡,它就最终终止了。taskkill/F/IM node.exe在任何目录的Windows上都像一个魔咒一样工作:-谢谢分享!!这是我在Windows10上为windowsWorks验证的唯一一个单行工作解决方案。顺便说一句,我不必以管理员的身份运行cmd.exe。它在2021年仍在工作。它在进程上也是有用的钩子。在'SIGINT'上。。。如果是在Windows上?请注意。。。出于某种原因,我不得不在git bash:taskkill//IM node.exe中的taskkill命令的标志上使用双斜杠,而我刚刚杀死了node。成功了。如果我想杀死一个节点端口进程,为什么要杀死整个节点进程。这没有意义,没有单独的进程来保存端口。如果您有多个节点进程访问不同的端口,或者根本没有,那么您必须挑出保持端口的节点进程;但这仍然只是一个节点过程。这个问题回答了许多其他问题。将其关闭,然后再次打开。Genius.我仍然可以看到使用这个命令的节点进程:ps aux | grep nodeThis实际上可以工作,感谢manCtrl+C是正确的。我使用了与以前相同的端口号,它的工作原理与以前相同。Ctrl-Z不会停止进程。它将其置于后台,以便您可以运行其他命令。这是一个unixshell的东西。要继续此过程,请在同一控制台中使用fg。在命令行中键入各种命令后,您可以看到服务器中发生了什么。我在基本相同的设置中遇到了相同的问题。在我的例子中,我注意到通过npm运行express应用程序会产生两个进程,但使用ctrl+c时只有一个进程关闭。当只使用一个节点启动应用程序时,只有一个进程处于打开状态,并且正确关闭。这有助于揭示整个过程。在mintty和cygwin依赖项之间似乎有一个bug。这个命令清楚地标识了PID,而不是ps aux | grep节点的输出。我也不需要苏多这是最好的答案。使用React Native with Thread,端口8081对我来说效果很好。这对我来说非常好。我可以确定3000端口的使用位置,并将其关闭。我也不需要sudo,很好。在获得killall-9{command}命令(例如killall-9节点)后,我也尝试过使用特定端口查找进程的命令非常有用。很高兴你发布了这个。同样的问题在这里。。。奇怪的是,它在调试中正常工作,但在使用nodemon运行npm startI am时出现此错误,并再次重新启动服务。他们有办法杀死nodemon吗?如果我使用lost,我就没有输出。这是否意味着该部分没有流程?除非您知道自己在做什么,否则不要使用kill-9。基本上,尝试kill-PID和kill-2pid以及kill-15pid并等待一段时间,如果这个过程仍然存在,那么就拿出大炮。无条件终止进程不会让它进行任何清理,这可能会导致文件句柄泄漏和争用条件等,或者导致已在使用的地址。除非您知道自己在做什么,否则不要使用kill-9。基本上,尝试kill-PID和kill-2pid以及kill-15pid并等待一段时间,如果这个过程仍然存在,那么就拿出大炮。无条件终止进程不会让它进行任何清理,这可能会导致文件句柄泄漏和争用条件等,或者导致已在使用的地址。除非您知道自己在做什么,否则不要使用kill-9。基本上,尝试kill-PID和kill-2pid以及kill-15pid并等待一段时间,如果这个过程仍然存在,那么就拿出大炮。无条件终止进程不会让它进行任何清理,这可能会导致文件句柄泄漏和争用条件等,或者导致该问题的地址已在使用。这应该是可接受的答案。比其他答案更容易记住。谢谢:
npm run stop-win
npm run stop-Linux
ps aux | grep node
kill -9 [PID] (provided by above command)
bash$ sudo netstat -ltnp | grep -w ':3000'
 - tcp6    0      0 :::4000      :::*        LISTEN      31157/node      

bash$ kill 31157
pkill nodejs 
//or 
pkill node
taskkill /f /im node.exe