Mac 系統 Port 號被佔用的解決方式
前言
開發系統時可能會出現一種狀況,也就是 Port 被佔用,因此會出現類似這種訊息「Port 5000 is already in use」,所以就寫一篇來紀錄一下如何解決 Port 被佔用的問題。
查看 Port
首先當你發現伺服器跟你說「Port xxxx
is already in use」的時候,你可以打開終端機,試著輸入以下指令查看 Port 是不是真的被佔用
(xxxx
替換成你被佔用的 Port)
1 | lsof -i:xxxx |
例如我查詢 5000 Port 的狀況
1 | lsof -i:5000 |
畫面上可以看到有以下欄位
- COMMAND
- PID
- USER
- FD
- TYPE
- DEVICE
- SIZE/OFF
- NODE
- NAME
你只需要特別注意兩個東西,也就是 COMMAND
跟 PID
。
如果你無法輸入 lsof -i:xxxx
的話,你可以試著加上 sudo
1 | sudo lsof -i:5000 |
透過上圖中的 COMMAND
我們可以知道是 Node 在佔用 Port,因此你可以試著翻一下是不是哪一個視窗忘記中止了。
如果你想要看全部有被使用的 Port 的話,則輸入以下
1 | lsof -n -i |
停止/釋放/清除 Port
如果你真的找不到這個啟動來源時,你可以試著輸入 kill PID
來清除被佔用的 Port。
以剛剛的範例圖來講
我們可以看到 PID 是 19625
,因此就輸入以下指令即可
1 | kill 19625 |
輸入完畢後你並不會得到任何回饋
但是你再去輸入一次 lsof -i:5000
就會發現沒有任何東西回應給你哩。
如果你有開著 Server 終端機的話,或許會發現 Server 終端機噴出這個訊息「[1] 19624 terminated npm start
」囉~
無法被釋放的 5000 Port
Mac 有一個特有的問題,就是 5000 Port 會被莫名其妙佔用,而且這個佔用也很機車,你不管怎麼 kill
都會長出來
這個問題主要是出在 Mac 控制中心有一個東西佔用了 5000 Port
解決方式
首先先開啟「系統偏好設定」,然後在上方搜尋「共享」
接下來進入到共享後,找到「Airplay 接收器」欄位,然後取消打勾即可
接下來再去查 lsof -i:5000
就不會發生佔用了。