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
结束了这个过程

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

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

然后,运行
sudo kill PID

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

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

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

崩溃时,do
process.On('uncaughtException',..)
和终止时do
process.On('SIGTERM',..)


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

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

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.js脚本中调用。第一个app.listen()成功,第二个抛出错误

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

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

流程选项卡->


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

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

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

  sudo pkill node

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

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

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


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

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

sudo lsof -i :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

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

sudo lsof -i :3000
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脚本来启动节点:
“start”:“node index.js”

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

如果我只是从git bash运行
node index.js
,而不是
npm run start
,并用ctrl+c终止,我就永远不会得到这个错误

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

这里有一个单行程序(用端口或配置变量替换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进程。用结束任务杀死所有人


对于像我这样的VisualStudioNoobs

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

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

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

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


您可能会遇到甚至会杀人的情况
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
"scripts": {
    "stop-win": "Taskkill /IM node.exe /F",
    "stop-linux": "killall node"
},
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