📅  最后修改于: 2023-12-03 14:50:41.935000             🧑  作者: Mango
当一个程序试图绑定一个已被占用的端口时,将会抛出 EADDRINUSE
错误。这表示另一个程序正在使用该端口,因此新程序不能将其用于创建一个新的服务。
当出现 EADDRINUSE
错误时,通常伴随着以下信息:
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
其中,3000
是正在使用的端口号。这个错误可以被 Node.js 异常捕获。
在解决 EADDRINUSE
错误之前,要先确定哪个程序占用了该端口。可以通过以下两种方式来查找:
lsof
命令运行以下命令以找到正在运行的程序和端口号:
lsof -i :3000
如果结果返回空,则该端口当前没有被占用。
运行以下命令以找到正在运行的程序和端口号:
netstat -ano | grep 3000
其中,3000
是要查找的端口号。如果没有结果返回,则该端口当前没有被占用。
一旦确定了哪个程序占用了该端口,就可以终止该程序,或者将新程序绑定到另一个可用的端口上。
为避免出现 EADDRINUSE
错误,可以采取以下措施:
避免硬编码端口号,而是使用环境变量或配置文件中的值,以便轻松更改端口。
在绑定端口之前,先检查该端口是否已被占用。可以使用 lsof
或 netstat
命令来完成这个任务。
在应用程序中使用信号处理程序。如果程序无法正常退出,则可以捕获 SIGINT
和 SIGTERM
信号,并且在关闭服务器之前释放已占用的端口。