Come posso rimuovere l'attuale processo / applicazione che è già assegnata a una porta?
Per esempio: localhost:8080
Come posso rimuovere l'attuale processo / applicazione che è già assegnata a una porta?
Per esempio: localhost:8080
Risposte:
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.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Passaggio 1 (lo stesso è nella risposta accettata scritta da KavinduWije ):
netstat -ano | findstr :yourPortNumber
Modifica al passaggio 2 per:
tskill typeyourPIDhere
Nota : taskkill
non funziona in alcuni terminali git bash
Con gli strumenti predefiniti di Windows 10:
Apri Windows PowerShell come amministratore
Trova PID (ProcessID) per la porta 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 ASCOLTA 77777
Uccidi il processo degli zombi:
taskkill /f /pid 77777
dove "77777" è il tuo PID
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
Se stai usando GitBash
Primo passo:
netstat -ano | findstr :8080
Passo due:
taskkill /PID typeyourPIDhere /F
( /F
termina forzatamente il processo)
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,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
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
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)
lsof -nt -i4TCP:9001
.
Per gli utenti Windows, è possibile utilizzare lo strumento CurrPorts per eliminare facilmente le porte in uso:
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.
Se stai usando Windows Terminal, il processo di uccisione potrebbe essere un po 'meno noioso. Sto usando il terminale di Windows e kill PID
funziona 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-
netstat -ano | findstr :PORT
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.
kill
. Posta qui se lo trovo.
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
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 ~/.bashrc
funzione:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
e semplicemente corri
killport 8080
Possiamo evitarlo semplicemente riavviando IIS, usando il comando seguente:
IISRESET