Windowsでポートを使用するプロセスのPIDを見つける


107

クラシックでの起動時にサービスがクラッシュします。

java.rmi.server.ExportException: Listen failed on port: 9999

それを殺すプロセスをどのように見つけることができますか?


ここでは、より複雑な代替ソリューション:stackoverflow.com/questions/48198/...
トーマス

回答:


217

コマンドシェルを開いて、次のように入力します(たとえば、ポートは123456です)。

netstat -a -n -o | find "123456"

必要なものがすべて表示されます。

ヘッダーは次のとおりです。

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

ここでは、詳細全体を返すため、pidのみを取得する方法
Gobi M

上記の唯一のPIDフォームを取得する方法
Chinya

10
またはnestat -aon | findstr 123456
ROMANIA_engineer

Windows上でこれを達成する簡単な方法は、この質問に示したさ- stackoverflow.com/questions/48198/...
Dracontis

4
Windows / cygwinの場合、おそらくnetstat -a -n -o | grep "123456"
WebComer 2018年

84

Windowsのポートを使用するプロセスのPIDを検索します (例:ポート: "9999")

netstat -aon | find "9999"

-a すべての接続とリスニングポートを表示します。

-o 各接続に関連付けられた所有プロセスIDを表示します。

-n アドレスとポート番号を数値形式で表示します。

出力:

TCP    0.0.0.0:9999       0.0.0.0:0       LISTENING       15776

次に、PIDでプロセスを強制終了します

taskkill /F /PID 15776

/F -プロセスを強制終了することを指定します。

注:一部の特定のプロセスを強制終了するには、追加の権限(管理者から実行)が必要な場合があります


nフラグを指定しないとnetstatが終了しないのはなぜですか?
Jared Beach

2
@JaredBeach-逆DNS名前解決を待機しているため、タイムアウトが完了すると最終的に終了します。これが内部 IPでハングする場合は、ローカルDNSサーバーに問題があることを示しています。
Steve Friedl、

7

これをプログラムで実行する場合は、PowerShellスクリプトで次のように指定されたオプションのいくつかを使用できます。

$processPID =  $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID

しかしながら; PIDの結果が正確になるほど、正確になることに注意してください。ポートが存在するはずのホストがわかっている場合は、それをかなり絞り込むことができます。netstat -aon | findstr "0.0.0.0:9999"1つのアプリケーションのみを返し、ほとんどの場合は正しいアプリケーションを返します。次のように、ポート番号のみを検索すると、たまたまその中にあるプロセスのみが返される場合があります9999

TCP    0.0.0.0:9999                        0.0.0.0:0       LISTENING       15776
UDP    [fe80::81ad:9999:d955:c4ca%2]:1900  *:*                             12331

最も可能性の高い候補は通常最初に終了しますが、スクリプトを実行する前にプロセスが終了した場合は、代わりにPID 12331になり、間違ったプロセスを強制終了する可能性があります。


4

スクリプトをいじった後、私はこのアクションに行きました。コピーして.batファイルに保存します。

FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i

解放する必要があるポート番号の「find "3306"」を変更します。次に、ファイルを管理者として実行します。このポートで実行されているすべてのプロセスを強制終了します。


4

コマンド:

netstat -aon | findstr 4723

出力:

TCP    0.0.0.0:4723           0.0.0.0:0                LISTENING       10396

forWindows のコマンドを使用して、プロセスID「10396」を切り取ります。

コマンド:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

出力:

10396

値の4番目の数値をカットする場合は、「リスニング」を意味し、Windowsでコマンドを実行します。

コマンド:

for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa

出力:

聞いている


コマンドが同じプロセスを複数回返すことがあるので、一意のPIDをフィルタリングするための提案はありますか?
Krzysztof Krzeszewski


0

コピーペーストシナリオを容易にするPowerShell(コア互換)ワンライナー:

netstat -aon | Select-String 8080 | ForEach-Object { $_ -replace '\s+', ',' } | ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID') | ForEach-Object { $portProcess = Get-Process | Where-Object Id -eq $_.PID; $_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; Write-Output $_ } | Sort-Object ProcessName, State, Protocol, AddressLocal, AddressForeign | Select-Object  ProcessName, State, Protocol, AddressLocal, AddressForeign | Format-Table

出力:

ProcessName State     Protocol AddressLocal AddressForeign
----------- -----     -------- ------------ --------------
System      LISTENING TCP      [::]:8080    [::]:0
System      LISTENING TCP      0.0.0.0:8080 0.0.0.0:0

同じコード、開発者向け:

$Port = 8080

# Get PID's listening to $Port, as PSObject
$PidsAtPortString = netstat -aon `
  | Select-String $Port
$PidsAtPort = $PidsAtPortString `
  | ForEach-Object { `
      $_ -replace '\s+', ',' `
  } `
  | ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID')

# Enrich port's list with ProcessName data
$ProcessesAtPort = $PidsAtPort `
  | ForEach-Object { `
    $portProcess = Get-Process `
      | Where-Object Id -eq $_.PID; `
    $_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; `
    Write-Output $_;
  }

# Show output
$ProcessesAtPort `
  | Sort-Object    ProcessName, State, Protocol, AddressLocal, AddressForeign `
  | Select-Object  ProcessName, State, Protocol, AddressLocal, AddressForeign `
  | Format-Table
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.