クラシックでの起動時にサービスがクラッシュします。
java.rmi.server.ExportException: Listen failed on port: 9999
それを殺すプロセスをどのように見つけることができますか?
クラシックでの起動時にサービスがクラッシュします。
java.rmi.server.ExportException: Listen failed on port: 9999
それを殺すプロセスをどのように見つけることができますか?
回答:
コマンドシェルを開いて、次のように入力します(たとえば、ポートは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
nestat -aon | findstr 123456
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
-プロセスを強制終了することを指定します。
注:一部の特定のプロセスを強制終了するには、追加の権限(管理者から実行)が必要な場合があります
これをプログラムで実行する場合は、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になり、間違ったプロセスを強制終了する可能性があります。
コマンド:
netstat -aon | findstr 4723
出力:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
for
Windows のコマンドを使用して、プロセス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を見つけるのに役立ちます。
lsof -i tcp:port_number
'lsof' is not recognized as an internal or external command.
コピーペーストシナリオを容易にする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