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

Aug 17 2020

포트를 사용하는 특정 프로세스의 세션에 속하는 모든 프로세스를 나열하고 종료하고 싶습니다. 이는 포트 번호를 입력으로 받아들이는 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")

답변

4 GeraldSchneider Aug 17 2020 at 20:28

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
1 Vazid Aug 17 2020 at 21:14

배치 스크립트를 찾는 경우

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
        )
    )
)
WasifHasan Sep 22 2020 at 09:34

다음에서 함수를 만들 수 있습니다.

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

그리고 그것을

kpn(8081)