Windowscmdでポートを使用している特定のプロセスのセッションですべてのプロセスを取得する方法
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)