Node.js Node/Express:EADDRINUSE,地址已在使用中-Kill server
我在node.js中使用connect运行了一个简单的服务器: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结束了这个过程
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()
某种程度上结束了事件循环(它仍然需要在这里和那里等待当前正在运行的堆栈),因此将其放在退出事件中没有意义
崩溃时,doprocess.On('uncaughtException',..)
和终止时doprocess.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