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.