Como posso remover o processo / aplicativo atual que já está atribuído a uma porta?
Por exemplo: localhost:8080
Como posso remover o processo / aplicativo atual que já está atribuído a uma porta?
Por exemplo: localhost:8080
Respostas:
Passo 1:
Abra o cmd.exe (nota: pode ser necessário executá-lo como administrador, mas isso nem sempre é necessário) e execute o comando abaixo:
netstat -ano | findstr :PORT_NUMBER
(Substitua PORT_NUMBER pelo número da porta desejado, mas mantenha os dois pontos)
A área circulada em vermelho mostra o PID (identificador de processo). Localize o PID do processo que está usando a porta que você deseja.
Passo 2:
Em seguida, execute o seguinte comando:
taskkill /PID PID /F
(Nenhum cólon desta vez)
Por fim, você pode verificar se a operação foi bem-sucedida ou não, executando novamente o comando na "Etapa 1". Se tiver sido bem-sucedido, você não verá mais resultados de pesquisa para esse número de porta.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Etapa 1 (o mesmo está na resposta aceita escrita por KavinduWije ):
netstat -ano | findstr :yourPortNumber
Altere na Etapa 2 para:
tskill typeyourPIDhere
Nota : taskkill
não está funcionando em algum terminal git bash
Com as ferramentas padrão do Windows 10:
Abra o Windows PowerShell como administrador
Encontre o PID (ProcessID) da porta 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0↓ LISTEN 77777
Mate o processo de zumbi:
taskkill /f /pid 77777
onde "77777" é seu PID
set /p port="Enter port: "
-> Porta de entrada FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> Extrai o PID para variável taskkill /f /pid %ProcessId%
-> Mata a tarefa cmd /k
-> Mantenha a janela aberta
Se você estiver usando o GitBash
Passo um:
netstat -ano | findstr :8080
Passo dois:
taskkill /PID typeyourPIDhere /F
( /F
finaliza com força o processo)
No Windows PowerShell versão 1 ou posterior, para interromper um processo na porta 3000, digite:
Processo de parada (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force
Conforme sugerido por @morganpdx, aqui está uma versão melhorada do PowerShell-ish:
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
Para uso na linha de comando:
for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a
Para uso em arquivo bat:
for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Se você já conhece o número da porta, provavelmente será suficiente enviar um sinal de finalização do software para o processo (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
.
Para usuários do Windows, você pode usar a ferramenta CurrPorts para eliminar facilmente as portas em uso:
Eu estava executando o zookeeper no Windows e não consegui parar o ZooKeeper na porta 2181 usando o zookeeper-stop.sh, então tentei esse método de barra dupla "//" para matar tarefas. Funcionou
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 você estiver usando o Terminal do Windows , o processo de extermínio pode ser um pouco menos tedioso. Estou usando o terminal do Windows e kill PID
funciona bem para eu matar processos na porta, pois o novo Terminal do Windows suporta certos comandos do bash. Por exemplo:kill 13300
Portanto, o processo completo terá a seguinte aparência:
netstat -ano | findstr :PORT
kill PID
Por exemplo:
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>
Veja quando eu digitei o primeiro comando para listar os processos na porta que retornou vazia. Isso significa que todos os processos estão mortos agora.
kill
. Vou postar aqui se eu encontrar.
Caso você queira fazer isso usando Python: marque É possível no python matar o processo que está escutando em uma porta específica, por exemplo 8080?
A resposta do Smunk funciona muito bem. Repito o código aqui:
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
Solução de uma linha usando GitBash :
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`
Substitua 8080 pela porta que seu servidor está ouvindo.
Se você precisar usá-lo com frequência, tente adicionar à sua ~/.bashrc
função:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
e simplesmente corra
killport 8080
Para evitar isso, basta reiniciar o IIS, usando o comando abaixo:
IISRESET