Seguí otra respuesta para encontrar el proceso que usa el puerto 8000 cuando inicio mi computadora.
Get-Process -Id (Get-NetTCPConnection -LocalPort 8000).OwningProcess
Eso demuestra que svchost
está usando el puerto. Así que lo elimino sin problemas y ejecuto lo que quiero en el puerto 8000.
Pero, ¿hay alguna manera de ver qué svchost
está usando ese puerto, para poder evitar que se inicie?
Respuesta1
De forma predeterminada, cada svchost
instancia aloja (o utiliza para alojar) múltiples servicios. Puedes leer sobre esto.aquí. De esta manera no se puede determinar correctamente qué servicio es responsable de la actividad del proceso. Aún puedes ver qué servicios están alojados en el proceso en cuestión, usando PowerShell:
Get-WmiObject Win32_Service -Filter "ProcessId='$PID'"
Por ejemplo:
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
(Estos no están alojados en svchost
, pero se entiende la idea).No siempre se puede saber qué servicios son desde la línea de comando del proceso.Debe utilizar la API de servicios para esto.
Puedes desactivar este multi-hosting por servicio, usando sc
(conwuauserv, el servicio de actualización de Windows):
sc config wuauserv type= own
Luego puede verificar nuevamente y ver qué servicio es exactamente responsable.
También puedes volver a cambiar:
sc config wuauserv type= share
Respuesta2
El svchost
proceso se utiliza para ejecutar servicios del sistema. Sería mejor averiguar qué servicio del sistema está utilizando este puerto y luego desactivarlo permanentemente (si no es útil).
Puede encontrarlo mirando la línea de comandos del svchost.exe
proceso. El -k
parámetro identifica el servicio del sistema.
Ya ha descubierto cómo obtener la identificación del proceso que usa el puerto. Para obtener la línea de comandos, ejecute PowerShell como administrador e ingrese el siguiente comando (ejemplo para el proceso 4680):
gcim win32_process | Where-Object {$_.processid -eq 4680} | select commandline
Una útil utilidad GUI es Explorador de procesos.