129

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

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

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

4

7 に答える 7

247

コマンド シェルを開いて次のように入力します (ポートは 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
于 2013-04-11T15:24:06.663 に答える
9

これをプログラムで実行する場合は、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 が発生し、間違ったプロセスが強制終了される可能性があります。

于 2017-11-09T13:19:37.273 に答える
5

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

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

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

于 2016-06-24T07:52:08.857 に答える
2

コピーペーストのシナリオを容易にする 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
于 2019-10-26T17:58:41.970 に答える