Como obter todos os processos em uma sessão de um processo específico que está usando uma porta no Windows cmd

Como obter todos os processos em uma sessão de um processo específico que está usando uma porta no Windows cmd

Quero listar e eliminar todos os processos pertencentes a uma sessão de um processo específico que está usando uma porta. Isso deve acontecer por meio de um comando em lote do Windows que aceitaria um número de porta como entrada.

Por exemplo: Digamos que um processo PA esteja atualmente escutando na porta 8081. O PA esteja sendo executado na sessão S1. Existem processos PB e PC pertencentes à mesma sessão do PA. PB e PC estarão rodando em portas diferentes (não é importante em quais portas eles estão rodando)

O arquivo de comando/lote do Windows deve receber 8081 como entrada e encerrar os processos PA, PB e PC.

Isso é possível? Agradeço uma pequena ajuda sobre isso, pois não sou muito versado em comandos/scripts em lote.

Minha tentativa falhada:

(for /F "tokens=2" %%i in (for /f "tokens=5" %a in ('netstat -aon ^| findstr 8081') do tasklist /NH /FI "PID eq %a") do taskkill /NH /FI "SESSIONNAME eq %%i")

Responder1

Na verdade, isso é muito fácil no PowerShell:

# Get the process of the listening NetTCPConnection and the session ID of the process
$SessionId = (Get-Process -Id (Get-NetTCPConnection -State Listen -LocalPort 8081).OwningProcess).SessionId
# Get all processes from that session and stop them
Get-Process | Where-Object { $_.SessionId -eq $SessionId } | 
    Stop-Process -Force -Confirm:$false

Responder2

Se você estiver procurando por script em lote

for /f "tokens=5" %%a in ('netstat -aon ^| findstr 8081 ^| findstr "LISTEN"') do (
    for /f "tokens=3" %%b in ('tasklist /NH /FI "PID eq %%a"') do (
        for /f "tokens=2" %%c in ('tasklist /NH /FI "SESSIONNAME eq %%b"') do (
            taskkill /F /PID %%c
        )
    )
)

Responder3

Você pode fazer uma função a partir disso:

function kpn($port){ps|?{$_.sessionID-eq(get-NetTcpConnection -sta listen -loc $port)}|kill -fo -confirm:$false}

E chame isso de

kpn(8081)

informação relacionada