Como eu mato o processo atualmente usando uma porta no host local no Windows?

494

Como posso remover o processo / aplicativo atual que já está atribuído a uma porta?

Por exemplo: localhost:8080

KavinduWije
fonte

Respostas:

1058

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.

KavinduWije
fonte
não está funcionando. Ainda processo é monitor
Hardik Mandankaa
16
Trabalhando perfeitamente. No meu caso, o Tomcat estava sendo executado na porta 8080 e eu precisava iniciar meu aplicativo Spring novamente. i.imgur.com/aVwSYvR.png Muito obrigado.
Hugo LM
16
Eu tive que digitar caracteres de escape ao executar o taskkill:taskkill //PID 12552 //F
Robert
1
resposta aceita não vai funcionar para os serviços que são configuradas para reiniciar em caso de falha (isto não é linux)
nurettin
1
acho que você quis dizer PID_NUMBER e não PORT_NUMBER emtaskkill /PID PORT_NUMBER /F
Marcin Kulik
132

Etapa 1 (o mesmo está na resposta aceita escrita por KavinduWije ):

netstat -ano | findstr :yourPortNumber

Altere na Etapa 2 para:

tskill typeyourPIDhere 

Nota : taskkillnão está funcionando em algum terminal git bash

afsarkhan10182
fonte
1
não encontrou para mim
Tzvi Gregory Kaidanov
1
@TzviGregoryKaidanov que problema você está enfrentando?
precisa saber é o seguinte
1
obrigado, funcionou alterando o skillkill para o tskill #
Md Shoaib Alam
1
Esta é a solução que funcionou para mim. Estou usando o GIT Bash.
dxhans5
1
Isso pode ser feito passando a saída do primeiro comando para o segundo?
James
115

Com as ferramentas padrão do Windows 10:

  • Passo um:

Abra o Windows PowerShell como administrador

  • Passo dois:

Encontre o PID (ProcessID) da porta 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0↓ LISTEN 77777

  • Passo três:

Mate o processo de zumbi:

taskkill /f /pid 77777

onde "77777" é seu PID

Duracell De Monaco
fonte
1
Como automatizar o processo e combinar esses dois comandos juntos em um arquivo bat, se não houver possibilidade de visualizar a saída do cmd e, em seguida, escrever novo comando manualmente?
Serob_b 20/09/19
3
@Serob_b 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
Vikrant
94

Se você estiver usando o GitBash

Passo um:

netstat -ano | findstr :8080

Passo dois:

taskkill /PID typeyourPIDhere /F 

( /Ffinaliza com força o processo)

Ara Yaghsizian
fonte
dupla cortou não funcionou para mim
kylexy1357
2
@ kylexy1357 tente com uma única barra. O "double slash" é um caractere de escape que precede o /, o que não é necessário para algumas conchas.
Robert
27

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

todorm
fonte
'Stop-Process' is not recognized as an internal or external command,
Verde
3
Eu acho que isso funciona:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx
1
@Green Você precisa executar o comando no Windows PowerShell
todorm
1
primeiro error'd, seconf funcionou para mim
Tom
24

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
Mahesh Narwade
fonte
1
Se você quiser fazer isso em um .bat, substitua% a por %% a
Mahesh Narwade
23

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)
Estrangeiro companheiro
fonte
Se você sabe que a porta está usando IPv4, você também pode fazer isso lsof -nt -i4TCP:9001.
Josh Habdas 24/02/19
10

Para usuários do Windows, você pode usar a ferramenta CurrPorts para eliminar facilmente as portas em uso:

Digite a descrição da imagem aqui

Zuhair Taha
fonte
10

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.
driven_spider
fonte
6

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 PIDfunciona 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:

  • Abra o Terminal do Windows
  • Digite o seguinte comando para mostrar os processos em execução na porta que você deseja matar. netstat -ano | findstr :PORT
  • Digite a seguir para interromper o processo. 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.

preguiçoso
fonte
Eu sei que isso funciona porque eu testei, estou tentando encontrar documentação em torno dele, você tem alguma?
DanStarns
@ DanStarns, eu encontrei apenas isso até agora! docs.microsoft.com/en-us/windows/terminal
lazycipher
Obrigado pelo seu tempo, não é exatamente a página que estou procurando, uma página com todas as funções fornecidas no terminal, como kill. Vou postar aqui se eu encontrar.
DanStarns
1
Eu não encontrei muito sobre isso a partir de agora. Por favor, poste se você encontrar alguma coisa.
lazycipher
4

Você pode executar um arquivo 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
flopcoder
fonte
4

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
Kardi Teknomo
fonte
Isso funcionou para um soquete que também usa um número de porta específico no Google Cloud! Thanks a ton
peevesy
0

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 ~/.bashrcfunção:

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

e simplesmente corra

killport 8080
Italo Borssatto
fonte
-1

Para evitar isso, basta reiniciar o IIS, usando o comando abaixo:

IISRESET
ksrider 148
fonte