我的服务在启动时崩溃了,经典:
java.rmi.server.ExportException: Listen failed on port: 9999
如何找到杀死它的过程?
答案 0 :(得分:185)
只需打开一个命令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
答案 1 :(得分:69)
查找在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
- 指定强制终止进程。
注意:您可能需要额外的权限(从管理员运行)来杀死某些特定进程
答案 2 :(得分:4)
在摆弄脚本后,我开始采取行动。复制并将其保存在.bat文件中:
FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i
更改'找到" 3306"'在需要免费的端口号中。然后以管理员身份运行该文件。它将终止在此端口上运行的所有进程。
答案 3 :(得分:4)
如果您想以编程方式执行此操作,可以使用PowerShell脚本中给出的一些选项:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID
然而;请注意,您的PID结果越准确,您的PID结果就越精确。如果你知道端口应该在哪个主机上,你可以缩小它的范围。 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并杀死错误的进程。
答案 4 :(得分:1)
这有助于使用端口号查找PID。
lsof -i tcp:port_number
答案 5 :(得分:1)
<强>命令:强>
netstat -aon | findstr 4723
<强>输出:强>
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
现在使用Windows中的for
命令剪切进程ID&#34; 10396&#34;
<强>命令:强>
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
<强>输出:强>
10396
如果你想削减值的第4个数字意味着&#34; LISTENING&#34;然后在Windows中执行命令。
<强>命令:强>
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
<强>输出:强>
聆听
答案 6 :(得分: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