Error: listen EADDRINUSE
为什么在运行服务器时要执行请求,nodejs会出现问题在80端口上?对于网络浏览器来说,这不是问题:服务器运行时,我可以在Internet上冲浪。
服务器是: >和请求:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
#1 楼
EADDRINUSE
意味着listen()
尝试将服务器绑定到的端口号已在使用。因此,在您的情况下,必须在端口80上已运行服务器。
如果您在该端口上运行着另一个Web服务器,则必须将node.js放在该服务器的后面,并通过它进行代理。真的在听:
var http=require('http');
var server=http.createServer(function(req,res){
res.end('test');
});
server.on('listening',function(){
console.log('ok, server is running');
});
server.listen(80);
评论
我只运行此服务器。在我启动服务器之前,xmlhttprequest可以工作。在端口80上启动服务器后,服务器也可以正常工作。但是,如果我在启动服务器后执行xmlhttprequest,则会收到此错误。
–丹尼·福克斯(Danny Fox)
2012年3月27日22:54
如果服务器已经在侦听,这是否还会引发错误?
–trysis
15年6月16日在16:27
对我来说这是Skype造成的
–哔哔声
17年6月21日在14:03
#2 楼
对我真正的帮助是:killall -9 node
但这会杀死系统进程。
使用
您可以检查它是否有效。
评论
也对我来说。以我为例,我只运行了两次listen函数,第二次出现了错误
–vabada
2015年4月6日在7:16
在相关说明中,您还可以阅读我何时不应该杀死-9进程。
– Aurelio
15年8月4日在10:00
这里的问题是你们在第一次运行后没有优雅地退出节点进程。因此,节点仍绑定到该端口。 ps aux | grep节点会显示出来。与其使用CTRL + Z终止应用程序,不如使用CTRL + C退出应用程序。这将正常退出应用程序,并删除端口绑定。
–riser101
2015年12月7日在10:29
超过150票的解决方案等于用槌敲打您的软件。
–LeeGee
16-3-23在11:14
该解决方案非常有问题,因为-9标志将在不释放内存的情况下终止进程。您实际上应该仅将此作为最后的解决方案。
–亚基·克莱因(Yaki Klein)
17年4月4日在6:23
#3 楼
Patrick提出的上述killall -9 node
可以按预期工作,并且可以解决问题,但是您可能希望阅读此答案的编辑部分,了解为什么kill -9
可能不是最佳选择。 最重要的是,您可能希望针对单个进程,而不是盲目地杀死所有活动进程。
,在这种情况下,首先获取该进程的进程ID(PID)。在该端口上运行的进程(例如8888):
lsof -i tcp:8888
这将返回以下内容:然后就去做(ps-实际上不行。请继续阅读下面的内容): >编辑:我今天在阅读一个相当相关的主题,偶然发现了一个有趣的主题,为什么我不应该进行此过程。
通常,您应在kill -9之前使用kill -15,以使目标进程有机会自行清除。 (进程不能捕获或忽略SIGKILL,但是它们可以并且经常捕获SIGTERM。)如果您不给进程提供完成进程并清理的机会,则可能会留下损坏的文件(或其他状态)重新启动后将无法理解。
因此,如上所述,您最好使用以下方法终止上述过程:
kill -9 57385
编辑2:正如在此处的注释中多次提到的,此错误是由于没有正常退出进程而导致的。这意味着许多人使用CTRL + Z退出节点命令(或其他任何命令)。停止正在运行的进程的正确方法是发出CTRL + C命令,该命令执行干净退出。
以正确的方式退出进程将在关闭端口的同时释放该端口。这样一来,您就可以重新启动该过程,而不必担心在重新运行之前自行杀死该过程。
评论
我应该在哪里运行此命令?在命令提示符下?在NPM控制台上?
–尤利西斯·阿尔维斯(Ulysses Alves)
16年1月5日,11:14
@UlyssesAlves只是打开一个终端窗口,然后从那里终止进程。
– Aurelio
16年1月5日在13:37
@Nobita在Windows中可以使用吗?现在我意识到这可能是MAC OS命令。无论如何,我重新启动了PC,再也没有收到此错误。我认为其他一些应用程序正在使用同一端口节点。
–尤利西斯·阿尔维斯(Ulysses Alves)
16年1月5日在13:49
pgrep node显示是否有节点进程在您身上失控。 pkill节点将杀死em。
– Josh.F
16-4-27的4:22
不适用于Windows,人们-您必须尝试其他端口或重新启动计算机:P
–汤姆·斯蒂克(Tom Stickel)
17年7月15日在7:56
#4 楼
抬起头来,Skype有时会侦听端口80,因此如果您尝试从Node.js或任何其他应用程序侦听端口80,则会导致此错误。您可以在Skype中关闭该行为通过访问选项并单击“高级”->“连接”->“使用端口80”(取消选中此端口)
PS进行更改后,别忘了重新启动Skype!
评论
附言进行更改后,别忘了重新启动Skype!
–Rob Evans
13年4月12日在12:08
这是我见过的最令人震惊的设计缺陷之一。他们曾经考虑接管80或443的Skype开发人员有多疯狂?
– AJB
15年9月21日在21:35
罗伯(Rob),尽管您的调试技能大+1。
– AJB
15年9月21日在21:35
@AJB他们这样做是为了尝试突破将出站流量限制为http请求的防火墙,但是在防火墙未使用DPI的情况下,只需执行基本端口阻止。仍然...默认情况下启用此功能有点愚蠢!
–Rob Evans
2015年9月22日在10:52
是的,这是我对他们为什么要这么做的想法进行了思考之后才想到的。尽管如此,还是非常丑陋的。而且默认情况下启用它的想法只是自大。
– AJB
15年9月22日在18:45
#5 楼
您应该尝试终止正在监听端口80的进程。Killall将终止所有正在运行的节点应用程序。您可能不想这样做。使用此命令,您只能杀死正在侦听已知端口的一个应用程序。
如果使用unix,请尝试以下命令:
sudo fuser -k 80/tcp
评论
谢谢亚奇。 killall节点对我来说失败了,但这可行。
– M号
16-10-8在19:19
谢谢! killall和lsof -i不能为我工作,但是可以。
–卡夫斯
16-10-25在5:43
您可能不想杀死所有正在运行的节点应用程序。
–亚基·克莱因(Yaki Klein)
16-10-25在7:35
#6 楼
错误原因:您正在尝试使用繁忙的
port number
Windows / Mac的两种可能的解决方案
免费的当前使用的端口number
为当前程序选择另一个端口号
1。可用端口号
Windows
1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F
Mac
您可以尝试netstat
netstat -vanp tcp | grep 3000
对于OSX El Capitan和更高版本(或者如果您的netstat不支持-p),请使用lsof
sudo lsof -i tcp:3000
如果这不能解决您的问题,
Mac
用户可以参考有关此问题的完整讨论。查找(并杀死)在Mac上锁定端口3000的进程> 2。是否更改端口号?
Windows
set PORT=5000
Mac
export PORT=5000
评论
您也可以在Windows中执行一个命令:netstat -ona | findstr“ .0:PORT +0.0.0.0:0 + LISTENING” |对于('more')中的/ f“ tokens = 5”%t,执行taskkill / PID:%t / f
– Bernardo Dal Corno
19年6月15日在5:53
#7 楼
在控制器环境下,您可以使用:pkill node
,然后再运行脚本即可完成这项工作。正确,如果您有一个仅运行一个实例的容器,那么您将拥有这样的环境,可以保证这一点。通过程序查找找到。就像如果您的进程被称为node-server-1一样,您可以执行node
。该资源可能对理解以下内容很有帮助: / 4-杀死进程的方法-killall-pkill-xkill /
评论
如果想稍微小心一点,请事先查看pgrep节点,看看正在运行哪些节点进程
– Josh.F
16-4-27的4:22
完全!我是在说这是一个容器或对该过程进行严格控制的地方。
–哈维尔·科沃斯(Javier Cobos)
17年5月1日下午6:39
与上面提供的其他答案相比,我要说的是一个很棒的答案。每个人都请投票。
–吉坦德拉·帕瓦尔(Jitendra Pawar)
19年4月8日在14:17
@JavierCobos:如果您是在容器或类似受控空间内发言,请将该信息添加到答案本身。许多人不在这样的环境中,特别是在开发机器上,这可能会带来意想不到的后果。赞成票,但很高兴在适当澄清的情况下更改投票。
– lindes
19年5月7日,1:14
很多人都会……但是,作为一个花费大量时间帮助培训初级开发人员的人,甚至超出了这种背景,我可以告诉您,很多人在Stack Overflow上利用了答案,而并没有真正理解他们在做什么。 ..他们只是面临一个问题,并且看到一些东西代表着似乎是他们的问题的解决方案,于是他们奔波。所以...我个人希望该站点提供良好的解释并养成良好的一般习惯。所以,这就是我从那里来的。我知道这不是唯一的观点。 :)
– lindes
19年5月9日在6:46
#8 楼
您的应用程序已在该端口8080上运行。使用此代码终止该端口并再次运行您的代码
sudo lsof -t -i tcp:8080 | xargs kill -9
评论
这个问题引用的是端口80,而不是8080。此外,虽然这可能会摆脱端口8080上的问题,但使用kill -9几乎可以肯定是过大的,而且,我认为,如果不使用,则给出可怕的建议关于它的具体警告。只是杀死就可以解决问题,实际上,我认为,这个问题的根本问题是他们试图一遍又一遍地重新运行服务器,因此,这只是黑客,而不是解决方法。他们需要对正在发生的事情有更好的了解,而这个答案实际上并没有提供。
– lindes
19年5月7日,1:17
#9 楼
这对我有效(我正在使用mac)。运行此命令lsof -PiTCP -sTCP:LISTEN
这将显示您的系统正在使用的端口列表。找到您的节点正在运行的
PID
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 17269 hientrq 16u IPv6 0xc42959c6fa30c3b9 0t0 TCP *:51524 (LISTEN)
node 17269 hientrq 19u IPv4 0xc42959c71ae86fc1 0t0 TCP localhost:1337 (LISTEN)
并运行
kill -9 [YOUR_PID]
#10 楼
可能导致此错误的另一件事是同一节点代码中的两个HTTP服务器。我正在将一些Express 2更新为Express 3代码,并且有此代码...#11 楼
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID
kill PID
ex: kill 129393
评论
请在您的答案中添加更多上下文,以帮助将来的读者理解代码/命令。
–米洛
19年7月25日在18:41
#12 楼
EADDRINUSE
表示该端口(我们试图在节点应用程序中监听)已被使用。为了克服,我们需要确定哪个进程正在那个端口上运行。 例如,如果我们尝试在3000端口中监听节点应用程序。我们需要检查该端口是否已被任何其他进程使用。
step1:
$sudo netstat -plunt |grep :3000
以上命令在下面给出结果。
tcp6 0 0 :::3000 :::* LISTEN 25315/node
step2:
现在您获得了进程ID(25315),请杀死该进程。
kill -9 25315
step3:
npm run start
注意:此解决方案适用于Linux用户。
#13 楼
sudo kill $(sudo lsof -t -i:80)
强制杀死
sudo kill -9 $( sudo lsof -t -i:80)
使用cmd命令杀死特定端口,然后运行服务器
#14 楼
尝试这两个命令,它将停止所有节点进程。killall 9 node
pkill node
npm start
#15 楼
当您要在其上运行应用程序的端口上运行任何进程时,就会出现此错误。如何让该端口上运行的进程=>
命令:
须藤netstat -ap | grep:3000
输出:您将获得使用该端口的过程信息
tcp 0 0 IP地址:3000:LISTEN 26869 / node
现在您可以杀死该进程
sudo kill -9 26869
#16 楼
在下面的命令中替换您的portNumbersudo lsof -t -i tcp:portNumber | xargs kill -9
#17 楼
EADDRINUSE表示您的nodejs应用程序的端口已在使用中。现在您已经杀死了在该端口上运行的进程/应用程序。 br />
lsof -i tcp:3000
现在您将从中获取进程ID。
运行此命令:
杀死-9 processId
#18 楼
有一种使用任务管理器终止该过程的方法:请注意,该解决方案仅适用于Windows。
转到任务管理器(或使用快捷键Ctrl + Shift + Esc)
在“背景进程”上,找到“ Node.js”进程并终止它们(右键单击它们,然后选择“结束任务”)
现在您应该可以重新开始了
评论
对于Mac用户:1.启动“活动监视器”。2.在右上方的搜索栏中搜索“节点”。 3.双击节点进程并退出。你们都准备好了!!!!快乐的编码。
–先贤
19-10-30在8:48
#19 楼
我在使用http.client之前(在节点中)已经看到此错误,并且我记得,该问题与未初始化httpClient或在httpClient创建和/或url请求中设置错误的选项有关。#20 楼
我也遇到同样的问题,我只需要关闭终端并打开一个新终端,然后再次运行。对我来说有效,有时候只需要等待几秒钟,直到它再次起作用。
#21 楼
错误:侦听EADDRINUSE表示您要分配/绑定到应用程序服务器的端口已在使用中。您可以为应用程序分配另一个端口。,或者如果您想为应用程序分配相同的端口。然后杀死在所需端口上运行的应用程序。
对于节点应用程序,您可以尝试的方法是,通过以下方式找到该节点应用程序的进程ID: br />
获取进程ID后,执行
ps -aux | grep node
评论
-aux在Windows 10上?
–汤姆·斯蒂克(Tom Stickel)
17年7月15日在7:42
-aux不适用于基于Linux的系统。对于基于Windows的系统,您可以查找所需节点进程的系统监视器并结束它。
–Parth Vyas
17年7月15日在7:45
#22 楼
在Debian上,我发现要在端口80上运行,您需要以root身份发出命令,即sudo node app.js
我希望它对您有所帮助
#23 楼
对于Windows用户,请在PowerShell窗口中执行以下命令以杀死所有节点进程。Stop-Process -processname node
#24 楼
在我的情况下,Apache HTTP Server在端口80上运行,我通过以root身份发出命令来解决了该问题sudo killall httpd
更新
如果安装了Jenkin并在Mac上运行;
可以使用
sudo lsof -i tcp:8080
检查它如果是,并且只想停止Jenkins,请运行:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
#25 楼
似乎正在运行另一个Node ng服务进程。在控制台(Linux / Mac)中键入以下命令进行检查:ps aux|grep node
并退出:
kill -9 <NodeProcessId>
或者alternativley使用
ng serve --port <AnotherFreePortNumber>
在您选择的免费端口上为您的项目服务。
#26 楼
在杀死NODE_PORT的同时,它可能会杀死您的chrome进程或正在侦听同一端口的任何东西,这很烦人。此shell脚本可能会有所帮助-在我的情况下,端口为1337,但您可以随时对其进行更改
# LOGIC
CHROME_PIDS=`pidof chrome`
PORT_PIDS=`lsof -t -i tcp:1337`
for pid in $PORT_PIDS
do
if [[ ${CHROME_PIDS} != *$pid* ]];then
# NOT FOUND IN CHROME PIDS
echo "Killing $pid..."
ps -p "$pid"
kill -kill "$pid"
fi
done
sails lift
# OR 'node app' OR whatever that starts your node
exit
#27 楼
在我的情况下,我使用网络托管,但在本地主机中使用的是相同的主机,我使用了以下命令:ps -aef | grep 'node'
用于监视节点进程,然后控制台显示进程使用PID。
要杀死该进程,您必须使用以下命令:
kill -9 PID
其中PID是上述命令中的进程ID。
#28 楼
两台服务器不能在同一端口上侦听,因此请检查是否有其他服务器在同一端口上侦听,如果在同一端口上运行,还要检查浏览器是否同步。#29 楼
对于Windows 10上的其他用户,其节点为localhost
并在像3500而不是80的端口上运行... 什么不起作用: br />什么显示信息但仍然不起作用:
killall ? command not found
ps -aux | grep 'node' ? ps: user x unknown
什么起作用:
Windows上的Git Bash或Powershell
ps -aef | grep 'node'
ps ax
kill -9 61864
注意PID(最右边)
我无法让
killall
正常工作...所以打开您的任务管理器
在“进程”选项卡上,右键单击“名称”或任何列,然后选择以包含PID
,然后按PID右键单击,然后单击结束任务。
现在在Windows上进行了不太有趣的练习之后,我意识到我可以使用任务管理器并找到Node引擎并结束它。
FYI,我当时使用Visual Studio Code在端口3500上运行Node,并且我在VS代码中使用Git Bash shell。我已经用Ctrl + C正常退出了,但是有时候这并不能杀死它。我不想更改端口或重新启动,因此可以正常工作。希望它可以帮助其他人。否则,这是我自己的文档。
#30 楼
适用于我的选项:运行:
ps -ax | grep node
您会得到类似的信息:
8078 pts/7 Tl 0:01 node server.js
8489 pts/10 S+ 0:00 grep --color=auto node
kill -9 8078
评论
您确定options.port定义为80吗? XHR代码是否在浏览器中运行?该服务器未运行时,可以运行“ nc -l 0.0.0.0 80”吗?在stackoverflow.com/questions/8553957/…上看到类似的问题。
您在哪个系统上?如果您要侦听某个阈值以下的端口,则某些系统需要sudo。
出现此问题是因为您要么在该端口上运行服务器而未关闭该端口,错误明确表明该端口已在使用中,这是因为我在vs代码中打开一个新项目而不关闭其他项目(通过拖放)
stackoverflow.com/questions/39632667 / ...