我的服务在启动的时候崩溃了:
java.rmi.server.ExportException: Listen failed on port: 9999
我怎样才能找到杀死它的方法?
只需打开一个命令 shell 并键入(说明您的端口是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
查找在 Windows < em > (例如端口: “9999”)上使用端口的进程的 PID
netstat -aon | find "9999"
显示所有连接和监听端口。
-o显示与每个连接关联的所属进程 ID。
-o
-n以数字形式显示地址和端口号。
-n
产出:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
然后用 PID 杀死进程
taskkill /F /PID 15776
/F-指定强制终止进程。
/F
注意: 您可能需要一个额外的权限(从管理员运行)来终止某些进程
在修改了一些脚本之后,我得到了这个操作。复制并保存到一个.bat 文件中:
FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i
在需要空闲的端口号中更改“ find“3306”。然后以管理员身份运行该文件。它将杀死在这个端口上运行的所有进程。
如果你想以编程的方式完成这项工作,你可以使用 PowerShell 脚本中提供的一些选项:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1] taskkill /f /pid $processPID
然而,请注意,您可以是更准确的,您的 PID 结果将是更精确的。如果您知道端口应该在哪个主机上,就可以大大缩小范围。netstat -aon | findstr "0.0.0.0:9999"只会返回一个应用程序,而且很可能是正确的应用程序。只搜索端口号可能会导致返回只有 9999在其中的进程,如下所示:
netstat -aon | findstr "0.0.0.0:9999"
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结束,并杀死错误的进程。
这有助于使用端口号查找 PID。
lsof -i tcp:port_number
命令:
netstat -aon | findstr 4723
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
现在使用 Windows 中的 for命令剪切进程 ID“10396”。
for
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
10396
如果你想切断值的第四个数字意味着“ LISTENING”,然后在 Windows 命令。
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
倾听
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