如何在 Windows cmd 中取得正在使用連接埠的特定進程的會話下的所有進程

如何在 Windows cmd 中取得正在使用連接埠的特定進程的會話下的所有進程

我想列出並終止屬於使用連接埠的特定進程的會話的所有進程。這應該透過 Windows 批次命令來實現,該命令接受連接埠號碼作為輸入。

例如: 假設進程 PA 目前正在偵聽連接埠 8081。 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)

相關內容