You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下lsof显示3306端口未占用却可telnet,如何定位并终止进程?

解决Mac下3306端口lsof无结果但telnet可连接的问题

你遇到的这个情况其实是因为lsof默认只检查IPv4的端口监听,而你的telnet连接成功是因为进程在监听IPv6的::1地址,所以常规的lsof -i :3306抓不到它。

先看看你给出的命令执行记录:

± |master ✓| → lsof -i :3306
|2.3.1| montana in ~/workspace
± |master ✓| → telnet localhost 3306
Trying ::1...
Connected to localhost.
Escape character is '^]'.
J 5.6.39|=X%N9r�&a;AtF>E!r>{mysql_native_passwordConnection closed by foreign host.

从telnet的输出能看到它尝试连接的是IPv6地址::1,说明监听进程绑定了IPv6的3306端口,而非(或不仅是)IPv4的127.0.0.1。

如何找到并终止监听进程

  • 方法1:用lsof查询IPv6端口
    执行这个命令就能找到对应的进程:

    lsof -i6 :3306
    

    输出里会包含进程的PID,比如类似这样:

    COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    mysqld  123  root   10u  IPv6 0x123456789abcdef      0t0  TCP *:mysql (LISTEN)
    
  • 方法2:用netstat全面排查
    如果lsof还是没结果,试试Mac自带的netstat命令,它能显示所有TCP端口的监听状态:

    netstat -anp tcp | grep 3306
    

    输出里的LISTEN状态行对应的PID就是你要找的,比如:

    tcp6       0      0  ::1.3306               *.*                    LISTEN      12345  67890
    
  • 终止进程
    拿到PID后,用kill命令强制终止:

    kill -9 <你的进程PID>
    

    要是这个进程是MySQL(从telnet输出里的mysql_native_password能看出来大概率是),如果你是用Homebrew安装的,也可以用更稳妥的方式停止:

    brew services stop mysql
    

补充说明

有些进程会配置成同时监听IPv4和IPv6端口,或者只监听IPv6——因为IPv6的套接字默认也能处理IPv4连接(取决于系统设置),但lsof的-i参数默认只扫描IPv4的套接字,所以必须加上-i6才能看到IPv6的监听情况。

内容的提问来源于stack exchange,提问作者Daniel Kaplan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:22:14