Windows: A maneira mais rápida de eliminar um processo em execução em uma porta específica

10

Estou passando por esse processo muitas vezes. Eu tenho que matar um processo em uma máquina Windows e eu conheço sua porta. Normalmente, as etapas são as seguintes: Localize o PID observando as portas (por exemplo, porta 8084). Listar os processos em execução nas portas

netstat -a -o -n

E, em seguida, mate o processo nessa porta com o seguinte comando

taskkill /F /PID <pid>

Existe algo como um pipe ou similar que eu possa usar no sistema operacional Windows para executar este comando em uma linha!?

    
por Armand 30.07.2012 / 11:58

3 respostas

9

Is there any thing like a pipe or similar that I can use on Windows OS to run this command in one line?

O cmd.exe e o PowerShell suportam pipes de um comando para outro. No PowerShell algo como (isso deve estar em uma única linha na linha de comando ou usar 'para escapar de novas linhas em um script):

netstat -ano
 | select -skip 4 
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} 
 | ? {$_.Fields[1] -match '15120$'}
 | % {taskkill /F /PID $_.Fields[4] }

Onde:

  • Select -skip 4 ignora as primeiras quatro linhas de cabeçalho. ( Select é a abreviação de Select-Object usado para executar SQL SELECT como projetos de objetos.
  • % é a abreviação de Foreach-Object , que executa um bloco de script em cada objeto ( $_ ) no pipeline e gera os resultados do bloco de script no pipeline. Aqui está primeiro dividindo a entrada em uma matriz de campos e, em seguida, criando um novo objeto com duas propriedades Original da sequência de netstat e Fields da matriz que acabou de criar.
  • ? é a abreviação de Where-Object , que é baseado no resultado de um bloco de script. Aqui corresponde a um regex no final do segundo campo (todos os contêineres do PowerShell são baseados em zero).

(Tudo testado, exceto o último elemento: não quero começar a matar processos: -)).

Na prática eu simplificaria isso, por exemplo. retornando apenas 0 ou o PID do primeiro foreach (que seria projetado para ignorar os cabeçalhos) e filtrar o valor não zero antes de chamar taskkill . Isso seria mais rápido de digitar, mas mais difícil de seguir sem conhecer o PowerShell.

    
por 30.07.2012 / 12:26
1

Aqui está uma função conveniente que você pode usar:

link

killp 8081
    
por 12.10.2017 / 10:54
0

Abra o prompt de comando e execute:

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

Se você quiser fazer isso em um .bat, substitua % a por %% a .

Se você quiser apenas matar o que está escutando naquele anexo de porta (^ | find "LISTENING") no final do outro resultado.

    
por 25.08.2016 / 17:06