Windows
如何在 Windows cmd 中使用埠的特定程序的會話下獲取所有程序
我想列出並終止屬於使用埠的特定程序的會話的所有程序。這應該通過一個接受埠號作為輸入的 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 ) ) )