查找 svchost 正在使用端口

查找 svchost 正在使用端口

我按照另一个答案找到了启动计算机时使用端口 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 实用程序是 进程探索器

相关内容