在使用 Swoole 扩展库的 WebSocket 服务时,直接退出终端,但是 WebSocket 使用的端口依然坚挺的在被占用着。 导致再次启动 WebSocket 服务失败。
释放端口,需要完成三步操作:
使用 netstat 命令查找本机各端口的网络连接情况
$ netstat -tln
#结果如下
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1997 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
这里我们要找的是 1997 端口
依据查找到的 1997 端口找到对应进程, lsof -i :1997, 注意 : 冒号不要漏掉了
lsof -i:1997
#结果如下
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 29416 root 3u IPv4 101371054 0t0 TCP *:gdp-port (LISTEN)
php 29416 root 16u IPv4 101405652 0t0 TCP VPS-OJ26RUCK:gdp-port->116.228.152.202:procos-lm (ESTABLISHED)
php 29416 root 19u IPv4 101391904 0t0 TCP VPS-OJ26RUCK:gdp-port->116.228.152.202:dsom-server (ESTABLISHED)
通过 lsof 命令我们找到了进程的 PID: 29416,接下来就是使用 kill -9 [PID] 把进程结束就好了
$ kill -9 29416
到这里就 OK 了,不过为了保险起见,再次执行 netstat -tln 确认是否结束了端口占用