查詢本機開放 Port(監聽中)
- UtilsPort網路LinuxWindowsMacnetstatsslsofkill作者:VincentCorgi約 1 分鐘閱讀
功能
說明如何在 Linux、Windows、Mac 列出 正在監聽的 port、查 誰佔用某個 port,以及必要時 結束佔用 process。
情境
- 要啟動服務卻出現「port 已被使用」、或懷疑本機開了不必要的監聽時,用此篇對照
ss/netstat/lsof或 Windows 指令。 - 安全盤點或除錯 API/資料庫連線時,確認實際聽在哪個 port、是否只綁本機。
Linux
列出所有監聽中的 TCP port(含 process)
Code
sudo ss -tlnp
-tTCP-llistening-n數字顯示 port(不解析服務名)-p顯示 process
僅 UDP 監聽
Code
sudo ss -ulnp
查詢特定 port 是否在監聽
Code
sudo ss -tlnp | grep :<port>
# 例:查 8080
sudo ss -tlnp | grep :8080
使用 netstat(若無 ss)
Code
sudo netstat -tlnp
sudo netstat -tlnp | grep :<port>
使用 lsof
Code
sudo lsof -i -P -n | grep LISTEN
sudo lsof -i :<port>
釋放(kill)佔用某 port 的 process
先查出 PID(例如用上面 ss 或 lsof -i :<port>),再終止:
Code
kill <pid>
# 若無法結束可強制
sudo kill -9 <pid>
Windows
列出所有監聽中的 port(含 process 名稱)
Code
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, @{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess).Name}}
僅列出 LISTENING(netstat)
Code
netstat -ano | findstr LISTENING
查詢特定 port 是否被使用
Code
netstat -ano | findstr :<port>
# 或
netstat -an | findstr ":<port>"
依 PID 查 process 名稱
Code
tasklist /fi "PID eq <pid>"
終止佔用某 port 的 process
先用 netstat -ano | findstr :<port> 取得最後一欄的 PID,再執行:
Code
taskkill /PID <pid> /F
/F 為強制結束。
Mac
列出所有監聽中的 port(含 process)
Code
lsof -i -P -n | grep LISTEN
-i網路-Pport 以數字顯示-n不解析 hostname
僅 TCP 監聽(netstat)
Code
netstat -an -p tcp | grep LISTEN
查詢特定 port 誰在佔用
Code
lsof -i :<port>
# 例:8080
lsof -i :8080
依 PID 查 process
Code
ps -p <pid> -o comm=
釋放(kill)佔用某 port 的 process
先用 lsof -i :<port> 取得 PID,再終止:
Code
kill <pid>
# 若無法結束可強制
kill -9 <pid>