¿Cómo elimino el proceso que actualmente usa un puerto en localhost en Windows?


Respuestas:


1059

Paso 1:

Abra cmd.exe (nota: es posible que deba ejecutarlo como administrador, pero esto no siempre es necesario), luego ejecute el siguiente comando:

netstat -ano | findstr :PORT_NUMBER

(Reemplace PORT_NUMBER con el número de puerto que desea, pero mantenga los dos puntos)

El área encerrada en un círculo rojo muestra el PID (identificador de proceso). Localice el PID del proceso que está utilizando el puerto que desea.

Paso 2:

A continuación, ejecute el siguiente comando:

taskkill /PID PID /F

(Sin dos puntos esta vez)

Por último, puede verificar si la operación tuvo éxito o no volviendo a ejecutar el comando en el "Paso 1". Si tuvo éxito, no debería ver más resultados de búsqueda para ese número de puerto.


no funciona. todavía se muestra el proceso
Hardik Mandankaa

16
Funcionando perfectamente En mi caso, Tomcat se estaba ejecutando en el puerto 8080 y necesitaba volver a iniciar mi aplicación Spring. i.imgur.com/aVwSYvR.png Muchas gracias.
Hugo LM

16
Tuve que ingresar caracteres de escape al ejecutar taskkill:taskkill //PID 12552 //F
Robert

1
respuesta aceptada no funcionará para los servicios que se establecen para el reinicio en caso de fallo (esto no es linux)
nurettin

1
Creo que te refieres a PID_NUMBER y no a PORT_NUMBER entaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

Paso 1 (lo mismo está en la respuesta aceptada escrita por KavinduWije ):

netstat -ano | findstr :yourPortNumber

Cambie en el Paso 2 a:

tskill typeyourPIDhere 

Nota : taskkillno funciona en alguna terminal de git bash


1
no lo encontré para mí
Tzvi Gregory Kaidanov

1
@TzviGregoryKaidanov, ¿qué problema estás enfrentando?
afsarkhan10182

1
gracias, funcionó cambiando el taskkill a tskill
Md Shoaib Alam

1
Esta es la solución que funcionó para mí. Estoy usando GIT Bash.
dxhans5

1
¿Se puede hacer esto pasando la salida del primer comando al seond?
James

115

Con las herramientas predeterminadas de Windows 10:

  • Paso uno:

Abra Windows PowerShell como administrador

  • Segundo paso:

Encuentre PID (ProcessID) para el puerto 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 ESCUCHE 77777

  • Paso tres:

Mata el proceso zombie:

taskkill /f /pid 77777

donde "77777" es su PID


1
¿Cómo automatizar el proceso y combinar estos dos comandos en un solo archivo bat si no hay posibilidad de ver la salida de cmd y luego escribir el nuevo comando manualmente?
Serob_b

3
@Serob_b set /p port="Enter port: "-> Puerto de entrada FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> Extrae PID en variable taskkill /f /pid %ProcessId%-> Elimina la tarea cmd /k -> Mantiene la ventana abierta
Vikrant

94

Si estás usando GitBash

Paso uno:

netstat -ano | findstr :8080

Segundo paso:

taskkill /PID typeyourPIDhere /F 

( /Ftermina con fuerza el proceso)


doble
corte no

2
@ kylexy1357 intente con una sola barra inclinada. El "doble corte" es un personaje de escape que precede al /, que no es necesario para algunos proyectiles
Robert

27

En Windows PowerShell versión 1 o posterior para detener un proceso en el puerto 3000, escriba:

Stop-Process (, (netstat -ano | Findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force


Como lo sugiere @morganpdx, aquí hay una versión más potente de PowerShell, mejor:

Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,
Verde

3
Me parece que esto funciona:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx

1
@ Verde Necesita ejecutar el comando en Windows PowerShell
todorm

1
primer error, segundo funcionó para mí
Tom

24

Para usar en la línea de comandos:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

Para usar en bat-file:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a

1
Si desea hacerlo en un .bat, reemplace% a por %% a
Mahesh Narwade

23

Si ya conoce el número de puerto, probablemente sea suficiente enviar una señal de terminación de software al proceso (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)

Si sabe que el puerto está utilizando IPv4, también puede hacerlo lsof -nt -i4TCP:9001.
Josh Habdas


10

Estaba ejecutando zookeeper en Windows y no pude detener el funcionamiento de ZooKeeper en el puerto 2181 usando zookeeper-stop.sh, así que probé este método de doble barra "//" para hacer tareas. Funcionó

     1. netstat -ano | findstr :2181
       TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       8876
       TCP    [::]:2181              [::]:0                 LISTENING       8876

     2.taskkill //PID 8876 //F
       SUCCESS: The process with PID 8876 has been terminated.

6

Si está utilizando Windows Terminal, entonces el proceso de eliminación podría ser un poco menos tedioso. He estado usando el terminal de Windows y kill PIDfunciona bien para mí para matar procesos en el puerto ya que el nuevo Terminal de Windows admite ciertos comandos bash. Por ejemplo:kill 13300

Entonces, el proceso completo se verá así:

  • Abra la terminal de Windows
  • Escriba el siguiente comando para mostrar los procesos que se ejecutan en el puerto que desea eliminar. netstat -ano | findstr :PORT
  • Escriba following para matar el proceso. kill PID

Por ejemplo:

PS C:\Users\username> netstat -ano | findstr :4445
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7368
  TCP    [::]:4445              [::]:0                 LISTENING       7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>

Vea cuando escribí el primer comando para enumerar los procesos en el puerto que devolvió vacío. Eso significa que todos los procesos se eliminan ahora.


Sé que esto funciona porque lo probé, estoy tratando de encontrar documentación al respecto, ¿tiene alguno?
DanStarns

@ DanStarns, ¡hasta ahora solo he encontrado esto! docs.microsoft.com/en-us/windows/terminal
lazycipher

Gracias por su tiempo, no es exactamente la página que estoy buscando, una página con todas las funciones proporcionadas en el terminal como kill. Publicaré aquí si encuentro.
DanStarns

1
No he encontrado mucho sobre esto hasta ahora. Por favor, publique si encuentra algo.
lazycipher

4

Puede hacerlo ejecutando un archivo bat:

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

4

En caso de que quiera hacerlo usando Python: marque ¿Es posible en Python matar el proceso que está escuchando en un puerto específico, por ejemplo 8080?

La respuesta de Smunk funciona bien. Repito su código aquí:

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
            continue

¡Esto funcionó para un socket que también usa un número de puerto particular en Google Cloud! Muchas gracias
molesto

0

Solución de una línea usando GitBash :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

Reemplace 8080 con el puerto que su servidor está escuchando.

Si necesita usarlo con frecuencia, intente agregar a su ~/.bashrcfunción:

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

y simplemente corre

killport 8080

-1

Podemos evitar esto simplemente reiniciando IIS, utilizando el siguiente comando:

IISRESET
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.