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