在某些情況下啟動(dòng)項(xiàng)目時(shí)可能會(huì)出現(xiàn) [ERROR] Uncaught exception "Swoole\Exception"([98]failed to listen server port[0.0.0.0:20200], Error: Address already in use[98]) 這樣的提示,這是由于程序要使用的端口被其他程序占用,或者上一次啟動(dòng)的進(jìn)程沒有完全退出造成的。
遇到這種問題,我們可以先找出占用端口的進(jìn)程,然后殺死該進(jìn)程,再重新啟動(dòng)程序即可解決端口被占用的問題。
1、查找占用端口的進(jìn)程
假設(shè)項(xiàng)目要使用的端口是 20200,我們可以使用 lsof -i:20200 命令來查找占用端口的進(jìn)程,如果是其他端口,則將 20200 替換為實(shí)際使用的端口即可,效果如下:
由查找結(jié)果可以得知占用端口的進(jìn)程 pid 為 1555
2、殺死占用端口的進(jìn)程
執(zhí)行 kill -9 1555,即可將進(jìn)程殺死;殺死進(jìn)程后,再次使用 lsof -i:20200 命令查詢被占用端口,程序?qū)]有任何輸出,這說明現(xiàn)在該端口沒有被占用。
如果殺死進(jìn)程后,端口依舊被占用,可以在寶塔面板中檢查 supervisor 或者進(jìn)程守護(hù)管理器中是否存在守護(hù)進(jìn)程;如果存在守護(hù)進(jìn)程,程序被殺掉后會(huì)自動(dòng)重啟,在進(jìn)程守護(hù)管理器中關(guān)閉守護(hù)進(jìn)程即可。
解決端口被占用的問題后,此時(shí)再啟動(dòng)程序即可。