2013-04-11 7 views
56

mio incidente servizio all'avvio con il classico:Trova PID del processo che utilizzano una porta su Windows

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

Come posso trovare il processo per l'uccisione di esso?

+0

Soluzioni alternative più complesse qui: http://stackoverflow.com/questions/48198/how-can-you-find-out-which-process-is-listening-on-a-port-on-windows – Thomas

risposta

136

basta aprire una shell dei comandi e digitare: (pronunciando la porta è 123456)

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

Vedrete tutto il necessario

Le intestazioni sono:

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

qui come ottengo solo il pid, dal momento che restituisce interi dettagli –

+0

come ottenere l'unico modulo PID sopra i risultati – Chinya

+5

o, 'nestat -aon | findstr 123456' –

40

Trova PID di processo che utilizza una porta su Windows(ad es. porto: "9999")
netstat -aon | find "9999"

-a Visualizza tutte le connessioni e le porte di ascolto.

-o Visualizza l'ID del processo proprietario associato a ciascuna connessione.

-n Visualizza indirizzi e numeri di porta in forma numerica.

uscita:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776

poi uccidere il processo con PID taskkill /F /PID 15776

/F - Specifica di interrompere forzatamente il processo (es).

Nota: Potrebbe essere necessario un permesso supplementare (eseguito da admin) per uccidere alcuni determinati processi

+0

Perché netstat non esce a meno che non gli venga assegnata la n flag? –

4

Dopo un po 'giocherellare con uno script Sono venuto a questa azione. Copiare e salvare in un file .bat:

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

cambiamento 'trovare '3306'' il numero di porta che deve essere libera. Quindi esegui il file come amministratore. Sarà uccidere tutti i processi in esecuzione su questa porta

0

Se si vuole fare questo a livello di codice è possibile utilizzare alcune delle opzioni dato a voi come segue in uno script PowerShell:

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

Tuttavia; sii consapevole che più preciso puoi essere, più preciso sarà il risultato del tuo PID. Se si sa su quale host si trova la porta, è possibile restringerlo molto. netstat -aon | findstr "0.0.0.0:9999" restituirà solo un'applicazione e probabilmente la più corretta. Solo la ricerca sul numero di porta può causare a ritornare processi che accade solo per avere 9999 in esso, come questo:

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

Il candidato più probabile di solito finisce prima, ma se il processo è terminato prima di eseguire il lo script si può terminare con PID 12331 invece e uccidere il processo sbagliato.