1. 程式人生 > >開發問題(一)在windows和linux端口占用問題

開發問題(一)在windows和linux端口占用問題

logs ets 情況 toc 端口占用 所有 註意 linu eclips

前言

  今天在MyEclipse中使用tomcat發現tomcat端口8080竟然被占用了,所以就找了一下解決辦法共參考!

  在網絡程序的調試過程中,經常發生一些出乎意料的事情,比如創建一個TCP服務失敗,這時候往往需要查看系統的網絡情況,最常用的網絡抓包當然非WireShark模式。但往往很多時候只需要查看某個端口的使用情況,

  它到底被那個進程(對應PID)占用了,或者你還需要把它Kill掉。

  如果你在Windows操作系統,你可以使用netstat命令來查詢PID,然後可以打開任務管理器,查看這個PID對應的進程名;如果PID沒有顯示,菜單——>查看——>選擇列——>選中PID即可;得知進程後,我們可以將進程殺掉。

  下面我簡單描述一下我所了解的在Windows和Linux系統下處理方式。

一、在windows平臺中

  在windows控制臺窗口下執行:
    netstat -nao | findstr "8080"
    TCP 127.0.0.1:8080 0.0.0.0:0 LISTENING 208

  你看到是PID為208的進程占用了8080端口,如果進一步你想知道它的進程名稱,你可以使用如下命令:

    tasklist | findstr "208"

  如果你想殺死這個進程,你當然可以用前面描述的那種方法,在任務管理器裏把它KILL了,但如果你喜歡高效一點,那麽用taskkill命令就可以了:

    taskkill /pid 208

  如果你想強制殺死進程加一個-F參數

    taskkill -F /pid 208

二、在LInux平臺中

  netstat -pan | grep 8080 

  如果你稍微仔細一點,你會發現,用的都是netsta命令,事實上,netstat是一個比較通用的網絡統計命令,幾乎適用於所有現在流行的操作系統,無論是Linux,Window,還是其他Unix,或者Unix-like操作系統,而且用法基本一致。 

  格式:

    netstat [-a] [-e] [-n] [-o] [-p Protocol] [-b] [-r] [-s] [-v] [Interval]

  參數說明:

-a 顯示所有連接和監聽端口。
-n 以數字形式顯示地址和端口號。
-o 顯示與每個連接相關的所屬進程 ID。 
-p 在Windows系統中,該選項用於指定默認情況的子集。proto 顯示 proto 指定的協議的連接;proto 可以是下列協議之一: TCP、UDP、TCPv6 或 UDPv6。
如果與 -s 選項一起使用以顯示按協議統計信息,proto 可以是下列協議之一:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。

-b 顯示包含於創建每個連接或監聽端口的可執行組件。在某些情況下已知可執行組件擁有多個獨立組件,並且在這些情況下; 包含於創建連接或監聽端口的組件序列被顯示。這種情況下,可執行組件名在底部的 [] 中,頂部是其調用的組件,等等,直到 TCP/IP 部分。註意此選項
可能需要很長時間,如果沒有足夠權限可能失敗。
-e 顯示以太網統計信息。此選項可以與 -s選項組合使用。
-s 顯示按協議統計信息。默認地,顯示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的統計信息。

-r 顯示路由表。
-v 與 -b 選項一起使用時將顯示包含於為所有可執行組件創建連接或監聽端口的組件。

  解決辦法:   

    1)查找被占用的端口:

      netstat -tln       netstat -tln | grep 8080     2)查看端口屬於哪個程序       lsof -i :8080     3)殺掉占用端口的進程:       kill -9 進程ID

  

開發問題(一)在windows和linux端口占用問題