Come posso interrompere il processo attualmente utilizzando una porta su localhost in Windows?


Risposte:


1059

Passo 1:

Apri cmd.exe (nota: potrebbe essere necessario eseguirlo come amministratore, ma ciò non è sempre necessario), quindi esegui il comando seguente:

netstat -ano | findstr :PORT_NUMBER

(Sostituisci PORT_NUMBER con il numero di porta desiderato, ma mantieni i due punti)

L'area cerchiata in rosso mostra il PID (identificativo del processo). Individua il PID del processo che utilizza la porta desiderata.

Passo 2:

Quindi, esegui il comando seguente:

taskkill /PID PID /F

(Nessun colon questa volta)

Infine, puoi verificare se l'operazione è riuscita o meno rieseguendo il comando nel "Passaggio 1". Se ha avuto successo, non dovresti vedere più risultati di ricerca per quel numero di porta.


non funziona. viene ancora visualizzato il processo
Hardik Mandankaa

16
Funziona perfettamente. Nel mio caso, Tomcat era in esecuzione nella porta 8080 e avevo bisogno di riavviare la mia app Spring. i.imgur.com/aVwSYvR.png Grazie mille.
Hugo LM,

16
Ho dovuto inserire caratteri di escape durante l'esecuzione di taskkill:taskkill //PID 12552 //F
Robert,

1
la risposta accettata non funzionerà per i servizi impostati per il riavvio in caso di errore (non si tratta di Linux)
nurettin

1
penso che volevi dire PID_NUMBER e non PORT_NUMBER intaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

Passaggio 1 (lo stesso è nella risposta accettata scritta da KavinduWije ):

netstat -ano | findstr :yourPortNumber

Modifica al passaggio 2 per:

tskill typeyourPIDhere 

Nota : taskkillnon funziona in alcuni terminali git bash


1
non l'ho trovato per me
Tzvi Gregory Kaidanov il

1
@TzviGregoryKaidanov quale problema stai affrontando?
afsarkhan10182,

1
grazie, ha funzionato cambiando taskkill in tskill
Md Shoaib Alam,

1
Questa è la soluzione che ha funzionato per me. Sto usando GIT Bash.
dxhans5,

1
Questo può essere fatto passando l'output del primo comando al secondo?
James,

115

Con gli strumenti predefiniti di Windows 10:

  • Primo passo:

Apri Windows PowerShell come amministratore

  • Passo due:

Trova PID (ProcessID) per la porta 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 ASCOLTA 77777

  • Terzo passaggio:

Uccidi il processo degli zombi:

taskkill /f /pid 77777

dove "77777" è il tuo PID


1
Come automatizzare il processo e combinare questi due comandi insieme in un file bat se non è possibile visualizzare l'output cmd e scrivere manualmente il nuovo comando?
Serob_b,

3
@Serob_b set /p port="Enter port: "-> Porta di input FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> Estrae PID in variabile taskkill /f /pid %ProcessId%-> Uccide l'attività cmd /k -> Mantieni la finestra aperta
Vikrant

94

Se stai usando GitBash

Primo passo:

netstat -ano | findstr :8080

Passo due:

taskkill /PID typeyourPIDhere /F 

( /Ftermina forzatamente il processo)


doppio
taglio non ha

2
@ kylexy1357 prova con una singola barra. La "doppia barra" è un carattere di escape che precede il /, che non è necessario per alcune conchiglie
Robert

27

In Windows PowerShell versione 1 o successiva per interrompere un processo sulla porta 3000 digitare:

Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force


Come suggerito da @morganpdx qui c'è un'altra versione di PowerShell, migliore:

Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,
Verde

3
Trovo che Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
funzioni

1
@Verde È necessario eseguire il comando in Windows PowerShell
entro il

1
primo errore, seconf ha funzionato per me
Tom

24

Per l'uso nella riga di comando:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

Per l'uso nel file bat:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a

1
Se vuoi farlo in un .bat, sostituisci% a per %% a
Mahesh Narwade,

23

Se si conosce già il numero di porta, sarà probabilmente sufficiente inviare un segnale di terminazione del software al processo (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)

Se sai che la porta sta usando IPv4 puoi farlo anche tu lsof -nt -i4TCP:9001.
Josh Habdas,

10

Per gli utenti Windows, è possibile utilizzare lo strumento CurrPorts per eliminare facilmente le porte in uso:

Inserisci qui la descrizione dell'immagine


10

Stavo eseguendo zookeeper su Windows e non sono riuscito a fermare ZooKeeper in esecuzione alla porta 2181 utilizzando zookeeper-stop.sh, quindi ho provato questo metodo "//" a doppia barra per taskkill. Ha funzionato

     1. netstat -ano | findstr :2181
       TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       8876
       TCP    [::]:2181              [::]:0                 LISTENING       8876

     2.taskkill //PID 8876 //F
       SUCCESS: The process with PID 8876 has been terminated.

6

Se stai usando Windows Terminal, il processo di uccisione potrebbe essere un po 'meno noioso. Sto usando il terminale di Windows e kill PIDfunziona bene per me per uccidere i processi sulla porta poiché il nuovo Terminale di Windows supporta alcuni comandi bash. Per esempio:kill 13300

Quindi, l'intero processo sarà simile a questo-

  • Apri Terminale di Windows
  • Digita il seguente comando per mostrare i processi in esecuzione sulla porta che desideri eliminare. netstat -ano | findstr :PORT
  • Digita follow per terminare il processo. kill PID

Per esempio:

PS C:\Users\username> netstat -ano | findstr :4445
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7368
  TCP    [::]:4445              [::]:0                 LISTENING       7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>

Vedi quando ho digitato il primo comando per elencare i processi sulla porta restituita vuota. Ciò significa che tutti i processi vengono eliminati ora.


So che funziona perché l'ho testato, sto cercando di trovare documentazione attorno ad esso, ne hai?
DanStarns

@DanStarns, ho trovato solo questo finora! docs.microsoft.com/en-us/windows/terminal
lazycipher

Grazie per il tuo tempo, non è proprio la pagina che sto cercando, una pagina con tutte le funzioni fornite nel terminale come kill. Posta qui se lo trovo.
DanStarns,

1
Non ho trovato molto su questo al momento. Per favore pubblica se trovi qualcosa.
lazycipher

4

Puoi farlo eseguendo un file bat:

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

4

Se vuoi farlo usando Python: spunta È possibile in Python terminare il processo che è in ascolto su una porta specifica, ad esempio 8080?

La risposta di Smunk funziona bene. Ripeto il suo codice qui:

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
            continue

Funzionava con un socket che utilizza un determinato numero di porta anche in Google Cloud! Grazie
mille

0

Una soluzione di linea usando GitBash :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

Sostituisci 8080 con la porta che il tuo server sta ascoltando.

Se devi usarlo spesso, prova ad aggiungere alla tua ~/.bashrcfunzione:

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

e semplicemente corri

killport 8080

-1

Possiamo evitarlo semplicemente riavviando IIS, usando il comando seguente:

IISRESET
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.