一.問題原因
在使用Idea開發(fā)Java項(xiàng)目時(shí)常常選中Jetty作為我們本地運(yùn)行項(xiàng)目的Web容器。當(dāng)我們執(zhí)行了jetty run后,若Idea被非正常地關(guān)閉了,可能出現(xiàn)Idea關(guān)閉了但Jetty仍在運(yùn)行的情況。這時(shí)候如果我們重新打開Idea,再次執(zhí)行jetty run時(shí)就會(huì)報(bào)錯(cuò):
Failure: Address already in use
二.解決方法
以下為在Windows系統(tǒng)下的解決方法。只需要執(zhí)行兩個(gè)命令即可。
命令一:找到占用端口的進(jìn)程
假如我是在80端口啟動(dòng)了jetty,那么打開windwos“命令提示符”窗口,輸入以下命令:
netstat -ano | findstr "127.0.0.1:80"
解釋一下,netstat -ano是列出系統(tǒng)當(dāng)前所有端口的占用情況。但這個(gè)列表往往較長(zhǎng),我們想要找到自己要的并不容易。所以才有了命令的后邊部分——findstr "80"。findstr命令搜索符合條件的結(jié)果,為我們過濾掉大部分的內(nèi)容,這樣就容易找到我們需要的80端口占用情況。
netstat和findstr命令之間有個(gè)“|”,這個(gè)豎杠表示將netstat命令的結(jié)果作為findstr命令的輸入。這種寫法在Linux系統(tǒng)中也比較常見。
執(zhí)行此命令的輸出結(jié)果示例如下:

我們看到輸出結(jié)果一共有5列,分別是:協(xié)議、本地地址、外部地址、狀態(tài)、PID。其中本地地址為“127.0.0.1:80”的為我們要找的,其對(duì)應(yīng)的PID是10468。
命令二:使用taskkill殺死占用端口的進(jìn)程
使用命令一我們拿到了占用端口的進(jìn)程的PID,10468。再執(zhí)行以下命令殺死進(jìn)程即可。
taskkill /PID 10468 /F
其中PID用于指定進(jìn)程ID,F(xiàn)選項(xiàng)意思是強(qiáng)制結(jié)束進(jìn)程
三.擴(kuò)展
拿到進(jìn)程的PID后,如果想進(jìn)一步了解其對(duì)應(yīng)的程序名稱,可以使用以下命令:如PID是4832
tasklist | findstr 4832
其輸出結(jié)果為:
