我按照另一个答案找到了启动计算机时使用端口 8000 的进程。
Get-Process -Id (Get-NetTCPConnection -LocalPort 8000).OwningProcess
这表明它svchost
正在使用端口。所以我毫无问题地终止了它,并在端口 8000 上运行了我想要运行的程序。
但是有没有办法查看哪个程序svchost
正在使用该端口,以便我可以阻止它启动?
答案1
默认情况下,每个svchost
实例托管(或用于托管)多个服务。您可以阅读此内容这里。您无法通过这种方式正确确定哪个服务负责进程活动。您仍然可以使用 PowerShell 查看相关进程中托管了哪些服务:
Get-WmiObject Win32_Service -Filter "ProcessId='$PID'"
例如:
PS C:\> Get-WmiObject Win32_Service -Filter "ProcessId='1448'"
ExitCode : 0
Name : EFS
ProcessId : 1448
StartMode : Manual
State : Running
Status : OK
ExitCode : 0
Name : KeyIso
ProcessId : 1448
StartMode : Manual
State : Running
Status : OK
ExitCode : 0
Name : SamSs
ProcessId : 1448
StartMode : Auto
State : Running
Status : OK
ExitCode : 0
Name : VaultSvc
ProcessId : 1448
StartMode : Manual
State : Running
Status : OK
(这些不是在 托管的svchost
,但您明白我的意思。)您无法总是从进程的命令行判断它们是什么服务。您必须为此使用服务 API。
sc
您可以使用以下方式禁用每个服务的多托管:武奥服务(Windows 更新服务):
sc config wuauserv type= own
然后您可以再次检查,看看究竟哪个服务负责。
您也可以再次切换回来:
sc config wuauserv type= share
答案2
该svchost
进程用于运行系统服务。最好找出哪个系统服务正在使用此端口,然后永久禁用它(如果它没用的话)。
您可以通过查看进程的命令行来发现这一点svchost.exe
。该-k
参数标识了系统服务。
您已经知道如何获取使用端口的进程 ID。要获取命令行,请以管理员身份运行 PowerShell 并输入以下命令(以进程 4680 为例):
gcim win32_process | Where-Object {$_.processid -eq 4680} | select commandline
一个有用的 GUI 实用程序是 进程探索器。