当尝试启动我的 node express 服务时,我遇到了臭名昭著的错误“listen EADDRINUSE”。
这是我尝试调用 listen 的行:
var server = app.listen(3000, function() {
console.log("listening on port %d", server.address().port);
});
问题是,我找不到任何其他正在运行的 Node 进程,也没有任何显示在端口 3000 上运行。
以下是我针对这些查询获得的结果:
$ ps aux | grep node
ec2-user 7780 0.0 0.0 110280 848 pts/1 S+ 17:41 0:00 grep node
$ nestat -anp | grep 3000
<nothing>
这真是令人费解。我可以尝试回收这个盒子,但它正在运行一个实时站点,我不愿意这样做。
我还能做些什么来尝试解决这个问题吗?
编辑:阿里,谢谢你提出了我不知何故错过的显而易见的事情。我现在在端口 3300 上启动并运行。但是,当我检查 netstat 时,我也没有在其中看到 3300。这向我暗示我有某种进程在 3000 上运行,但我不知道如何找到。郑重声明,这是一个 AWS Linux AMI。
最佳答案
当您在这些端口中停止程序时,您的进程可能不会停止。 尝试在您的终端中运行这些命令。
lsof -i:<your port number>
如果你有一个表那么这意味着你的进程没有被杀死,从那个表中复制那个 PID 并运行这个命令
kill -9 <PID>
这将终止在该端口上运行的进程,在此之后,您可以将此端口用于您的程序。
关于node.js - Node Express 说 EADDRINUSE 但端口是免费的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853225/