clashv

端口被占用、内核启动失败怎么办

7890、7897 等端口被其他程序或另一个 Clash 客户端占用时,内核会启动失败。说明怎么用 netstat、lsof 找出占用端口的程序,或在客户端里换一个端口。

适用:Clash Verge RevFlClashClash PartyClashX MetaClash Mimihomo

你看到的现象

客户端启动后代理用不了,日志或提示里出现端口被占用、内核无法启动之类的信息。例如:

  • Clash Verge Rev:保存端口时提示“端口 7897 已被占用”;启动时提示“端口 7897 已被占用,本次运行改用……”(它会自动临时换一个端口);或者“无法启动内核:已有内核进程正在运行”。
  • mihomo 内核日志(实测 v1.19.33,Linux):
Start Mixed(http+socks) server error: listen tcp 127.0.0.1:7890: bind: address already in use

Windows 上 bind: 后面的说明文字不同(由 Windows 系统提供,意思同样是这个地址和端口已经被使用)。注意:这种情况下内核进程可能仍在运行,只是这个代理端口没有监听成功,所以表现为“客户端开着,但代理不通”。

可能的原因和解决办法

同时开了两个 Clash 客户端

怎么判断:电脑上装了多个客户端(例如 Clash Verge Rev 和 Clash Party,或者旧的 Clash for Windows),它们可能都开着,或者在后台运行。常见默认端口:Clash Verge Rev 的混合代理端口是 7897,FlClash 是 7890。

怎么解决:只保留一个客户端运行,其他的彻底退出(包括托盘图标),再重启要用的客户端。

上一次的内核没有正常退出

怎么判断:Clash Verge Rev 提示“已有内核进程正在运行”,或者刚刚客户端崩溃、强制退出过。

怎么解决:按 Clash Verge Rev 的提示:退出相关应用或清理残留进程后重试;仍然无法解决,重启电脑。

其他程序占用了这个端口

怎么判断:查是哪个程序在用这个端口(把 7890 换成你的端口):

  • Windows:在命令提示符里执行 netstat -ano | findstr :7890,最后一列是进程 ID(PID);再到任务管理器的“详细信息”里按 PID 找到程序。
  • macOS、Linux:在终端执行 lsof -i :7890,可以看到程序名和 PID。

怎么解决:关掉占用端口的程序,或者给客户端换一个端口:

  • Clash Verge Rev:“设置”里的“端口设置”,改“混合代理端口”。端口号不能小于 1000;也可以点“随机端口”。
  • FlClash:“端口”设置里的“混合端口”,要在 1024 到 49151 之间。

换了端口以后,手动填过旧端口的地方(浏览器扩展、终端环境变量、其他软件的代理设置)也要一起改。

订阅导入成功了,但连不上?用配置文件检查器看看配置本身有没有问题,全程在浏览器本地完成。
打开配置文件检查器

常见问题

默认端口一定是 7890 吗?

不一定。mihomo 内核本身按配置文件里的 mixed-port、port、socks-port 监听,官方文档的示例端口只是示例;各客户端也有自己的默认值。以客户端设置里显示的端口为准。

还是没解决?

把客户端名称、版本和完整的报错信息发给我们(不要包含订阅链接),我们会补充到这一页。提交反馈