Windows

如何在 Windows cmd 中使用埠的特定程序的會話下獲取所有程序

  • September 22, 2020

我想列出並終止屬於使用埠的特定程序的會話的所有程序。這應該通過一個接受埠號作為輸入的 Windows 批處理命令來實現。

例如:假設一個程序 PA 目前正在偵聽埠 8081。PA 在會話 S1 下執行。有程序 PB 和 PC 與 PA 屬於同一會話。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")

這在 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

如果您正在尋找批處理腳本

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

引用自:https://serverfault.com/questions/1030444