Estou analisando esse processo várias vezes. Eu tenho que matar um processo em uma máquina Windows e apenas conheço sua porta. Normalmente, as etapas são as seguintes: Encontre o PID observando as portas (porta 8084 de exemplo) Liste os processos em execução nas portas
netstat -a -o -n
E então 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 !?
findstr
(o Windowsgrep
). Por exemplo:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Talvez isso você fica um passo mais perto;)findstr
: pode corresponder ao número da porta local ou remota. (Aceitar que o Q não especifica qual.)Respostas:
O
cmd.exe
PowerShell e o suporte a canais de um comando para outro. No PowerShell, algo como (isso deve estar em uma única linha na linha de comando ou use `para escapar de novas linhas em um script):Onde:
Select -skip 4
pula as quatro primeiras linhas do cabeçalho. (Select
é a abreviação deSelect-Object
usado para executar o SQL SELECT como projetos de objetos.%
é curto para oForeach-Object
qual executa um bloco de script em cada objeto ($_
) no pipeline e gera os resultados do bloco de script no pipeline. Aqui, ele primeiro divide a entrada em uma matriz de campos e, em seguida, cria um objeto novo com duas propriedades das quaisOriginal
a stringnetstat
eFields
a matriz recém-criada.?
é curto paraWhere-Object
quais filtros com base no resultado de um bloco de script. Aqui corresponde a uma regex no final do segundo campo (todos os contêineres do PowerShell são baseados em zero).(Todos testados, exceto o último elemento: eu 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 chamartaskkill
. Seria mais rápido digitar, mas mais difícil de seguir sem conhecer o PowerShell.fonte
netstat
. Isso leva a um erro (provavelmente inofensivo) deERROR: The process "12345" not found.
.taskkill /F /PID [PID]
. Com isso, alguém pode matar tarefas manualmente, desde que tenha uma maneira de obter o PID.Abra o prompt de comando e execute:
Se você quiser fazer isso em um .bat, substitua % a por %% a .
Se você quiser apenas matar o que está ouvindo nessa porta, adicione (^ | find "LISTENING") no final da outra localização.
fonte
Aqui está uma função conveniente que você pode usar:
https://github.com/majkinetor/posh/blob/master/MM_Network/Stop-ProcessByPort.ps1
fonte