Windows:特定のポートで実行されているプロセスを強制終了する最速の方法


11

私はこのプロセスを何度も繰り返しています。Windowsマシンでプロセスを強制終了する必要があり、そのポートを知っているだけです。通常、手順は次のとおりです。ポート(ポート8084の例)を見てPIDを見つけます。ポートで実行されているプロセスを一覧表示します。

netstat -a -o -n

そして、次のコマンドでそのポートのプロセスを強制終了します

taskkill /F /PID <pid>

このコマンドを1行で実行するためにWindows OSで使用できるパイプなどのようなものはありますか?


1
現在、完全な回答を書くことができないのは残念ですが、findstr(Windows grep)を見てください。次に例を示しますnetstat -a -o -n | findstr "LISTENING" | findstr ":135"。多分これはあなたに一歩近づくでしょう;)
Der Hochstapler '30 / 07/30

@OliverSalzburg 2番目に注意する必要がありますfindstr:ローカルまたはリモートのポート番号と一致する可能性があります。(Qではどちらが指定されていないことを受け入れます。)
Richard

回答:


10

このコマンドを1行で実行するためにWindows OSで使用できるパイプなどのようなものはありますか?

cmd.exeとPowerShellはどちらも、あるコマンドから別のコマンドへのパイプをサポートしています。PowerShellでは次のようになります(これはコマンドラインの1行にあるか、 `を使用してスクリプトの改行をエスケープします):

netstat -ano
 | select -skip 4 
 | % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} 
 | ? {$_.Fields[1] -match '15120$'}
 | % {taskkill /F /PID $_.Fields[4] }

どこ:

  • Select -skip 4最初の4つのヘッダー行をスキップします。(SelectSelect-Object、オブジェクトのプロジェクトのようにSQL SELECTを実行するために使用されます。
  • %は、パイプライン内のForeach-Object各オブジェクト($_)に対してスクリプトブロックを実行し、スクリプトブロックの結果をパイプラインに出力するための略語です。ここでは、最初のフィールドの配列への入力を分割し、2つのプロパティを持つ新鮮なオブジェクトを作成してOriginalから、文字列netstatFields、作成した配列。
  • ?Where-Object、スクリプトブロックの結果に基づくフィルターの略です。ここでは、2番目のフィールドの最後の正規表現に一致しています(すべてのPowerShellコンテナーはゼロベースです)。

(最後の要素を除いてすべてテスト済み:プロセスの強制終了を開始したくありません:-))。

実際には、これを単純化します。最初から0またはPID foreach(ヘッダーを無視するように設計されています)のみを返し、を呼び出す前に0以外の値でフィルタリングしますtaskkill。これはタイプするのは速くなりますが、PowerShellを知らないと理解するのが難しくなります。


なんらかの理由で、Powershellが選択を認識しません!Windows 7 "Der Befehl" select "ist entweder falsch geschrieben oder konnte nicht gefunden werdenを実行しています。" 「Select-Object」にも同じ
Armand

これは私にとってはうまくいきましたが、プロセスは2回見つかりました。IPv4とIPv6のバージョンがにリストされているためnetstatです。これにより、(おそらく無害な)のエラーが発生しますERROR: The process "12345" not found.
スコットウェルドン2017年

ここで重要なポイントはだと思いますtaskkill /F /PID [PID]。これにより、PIDを取得する方法がある限り、誰かが手動でタスクを強制終了できます。
Sawtaytoes 2017年

1

コマンドプロンプトを開いて実行します。

for /f "tokens=5" %a in ('netstat -aon ^| find "8080"') do taskkill /f /pid %a

.batで実行する場合は、%a%% aに置き換えます。

そのポートでリッスンしているものだけを殺したい場合は、他の検索の最後に追加(^ | find "LISTENING")してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.