在某些情况下启动项目时可能会出现 [ERROR] Uncaught exception "Swoole\Exception"([98]failed to listen server port[0.0.0.0:20200], Error: Address already in use[98]) 这样的提示,这是由于程序要使用的端口被其他程序占用,或者上一次启动的进程没有完全退出造成的。
遇到这种问题,我们可以先找出占用端口的进程,然后杀死该进程,再重新启动程序即可解决端口被占用的问题。
1、查找占用端口的进程
假设项目要使用的端口是 20200,我们可以使用 lsof -i:20200 命令来查找占用端口的进程,如果是其他端口,则将 20200 替换为实际使用的端口即可,效果如下:
由查找结果可以得知占用端口的进程 pid 为 1555
2、杀死占用端口的进程
执行 kill -9 1555,即可将进程杀死;杀死进程后,再次使用 lsof -i:20200 命令查询被占用端口,程序将没有任何输出,这说明现在该端口没有被占用。
如果杀死进程后,端口依旧被占用,可以在宝塔面板中检查 supervisor 或者进程守护管理器中是否存在守护进程;如果存在守护进程,程序被杀掉后会自动重启,在进程守护管理器中关闭守护进程即可。
解决端口被占用的问题后,此时再启动程序即可。