Windows cmd에서 포트를 사용하는 특정 프로세스의 세션에서 모든 프로세스를 가져오는 방법

Windows cmd에서 포트를 사용하는 특정 프로세스의 세션에서 모든 프로세스를 가져오는 방법

포트를 사용하는 특정 프로세스의 세션에 속하는 모든 프로세스를 나열하고 종료하고 싶습니다. 이는 포트 번호를 입력으로 받아들이는 Windows 배치 명령을 통해 발생해야 합니다.

예: 프로세스 PA가 현재 포트 8081에서 수신 대기 중이라고 가정해 보겠습니다. PA는 세션 S1에서 실행 중입니다. PA와 동일한 세션에 속하는 프로세스 PB 및 PC가 있습니다. PB와 PC는 서로 다른 포트에서 실행됩니다.(어떤 포트에서 실행되는지는 중요하지 않습니다.)

Windows 명령/배치 파일은 8081을 입력으로 사용하고 PA, PB 및 PC 프로세스를 종료해야 합니다.

이것이 가능한가? 저는 배치 명령/스크립팅에 대해 잘 알지 못하므로 이에 대한 약간의 도움을 주시면 감사하겠습니다.

나의 실패한 시도:

(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")

답변1

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

답변2

배치 스크립트를 찾고 있다면

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
        )
    )
)

답변3

다음과 같이 기능을 만들 수 있습니다.

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

그리고 그것을 다음과 같이 부르세요

kpn(8081)

관련 정보