2013-04-11 69 views
56

我的服務崩潰使用端口與經典:查找進程的PID在啓動的時候在Windows

java.rmi.server.ExportException: Listen failed on port: 9999 

我如何才能找到殺死它的過程嗎?

+0

更復雜的替代解決方案在這裏:http://stackoverflow.com/questions/48198/how-can-you-find-out-which-process-is-listening-on-a-port-on-windows – Thomas 2016-05-09 10:03:07

回答

136

只需打開一個命令外殼和類型:(說你的端口123456)

netstat -a -n -o | find "123456" 

你會看到你需要的一切

的標題是:

Proto Local Address   Foreign Address  State   PID 
TCP 0.0.0.0:37    0.0.0.0:0    LISTENING  1111 
+0

here如何獲得唯一的PID,因爲它返回整個詳細信息 – 2014-06-06 01:27:46

+0

如何獲得結果 – Chinya 2015-10-29 11:45:01

+5

以上的唯一PID窗體或'nestat -aon | findstr 123456' – 2016-02-09 14:18:40

40

查找PID使用Windows上的端口的進程的端口號(例如,端口:「9999」)
netstat -aon | find "9999"

-a顯示所有連接和偵聽端口。

-o顯示與每個連接關聯的擁有進程ID。

-n以數字形式顯示地址和端口號。

輸出:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776

然後,通過PID taskkill /F /PID 15776

/F殺死過程 - 指定要強行終止該過程(ES)。

注:您可能需要額外的許可(從管理員身份運行)殺死一些特定過程

+0

爲什麼netstat退出,除非你給它n標誌? – 2016-07-01 13:40:30

4

後,一些與我來到這個動作腳本擺弄。複製並保存它在一個.bat文件:

FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i 

變化「找到‘3306’」在需要是自由的端口號。然後以管理員身份運行該文件。如果你想這樣做編程,你可以使用一些給你的選項,如PowerShell腳本如下它會殺死這個港口

0

上運行的所有進程:

$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1] 
taskkill /f /pid $processPID 

然而,請注意,您可以更準確地得到您的PID結果。如果您知道該端口應該位於哪個主機上,則可以將其縮小很多。 netstat -aon | findstr "0.0.0.0:9999"將只返回一個應用程序,最有可能的是正確的。只有搜索上的端口號可能會導致你回到那個只發生在它9999過程中,像這樣:

TCP 0.0.0.0:9999      0.0.0.0:0  LISTENING  15776 
UDP [fe80::81ad:9999:d955:c4ca%2]:1900 *:*        12331 

最有可能的候選者通常結束了,但是,如果這一進程結束前您運行你可以用PID 12331代替腳本並殺死錯誤的進程。

相關問題