轉載自:https://www.zuojl.com/resolve-port-occupancy/
敘述
我們在啓動應用的時候經常發現我們需要使用的端口被別的程序佔用,更多的情況下,我們不只是需要找出是誰佔用了這個端口,有時還需要佔用者釋放這個端口。下面將簡單講述下在 windows 和 linux 系統中如何去結束這個佔用者的進程。
解決方案
Windows
在 Windows 系統中我們可以使用 CMD 命令來實現這個功能。主要設計的命令包括 netstat
findstr
taskkill
通過幫助命令能夠很好的獲取到這三個命令的使用方式,或者點擊文中的連接查看百度百科對其的解釋和使用例子。
比如我們想停用 Tomcat 所佔用的 8080 端口
netstat -ano | findstr ":8080"
輸入上面的命令可以看見下面的輸出
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 15496
TCP [::]:8080 [::]:0 LISTENING 15496
從左到又每一列的意義爲 協議、本地地址、外部地址、狀態、PID
我們記下最後的值再使用 taskkill
命令來結束指定進程號的進程。
taskkill /f /t /pid 15496
然後你會看到如下的輸出
成功: 已終止 PID 20816 (屬於 PID 15496 子進程)的進程。
成功: 已終止 PID 15496 (屬於 PID 17132 子進程)的進程。
到此端口就已釋放,再通過 netstat
你將找不到 8080 端口的信息。
Linux
在 linux 環境下能夠幫助找到進程號的命令。
- 進程查看器-ps
Linux 中的 ps 命令是 Process Status 的縮寫。 ps 命令用來列出系統中當前運行的那些進程。 ps 命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程。
ps -ef | grep tomcat
- 網絡服務和端口查詢-netstat
netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。
netstat -antp | grep 8080
一切皆文件 lsof
lsof(list open files)是一個查看當前系統文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後臺都爲該應用程序分配了一個文件描述符,該文件描述符提供了大量關於這個應用程序本身的信息。
lsof -i :8080
拿到進程號後就可以使用 kill
進行結束
kill -9 $PID