¿Cómo puedo eliminar el proceso / aplicación actual que ya está asignado a un puerto?
Por ejemplo: localhost:8080
¿Cómo puedo eliminar el proceso / aplicación actual que ya está asignado a un puerto?
Por ejemplo: localhost:8080
Respuestas:
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.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
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 : taskkill
no funciona en alguna terminal de git bash
Con las herramientas predeterminadas de Windows 10:
Abra Windows PowerShell como administrador
Encuentre PID (ProcessID) para el puerto 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 ESCUCHE 77777
Mata el proceso zombie:
taskkill /f /pid 77777
donde "77777" es su PID
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
Si estás usando GitBash
Paso uno:
netstat -ano | findstr :8080
Segundo paso:
taskkill /PID typeyourPIDhere /F
( /F
termina con fuerza el proceso)
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,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
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
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)
lsof -nt -i4TCP:9001
.
Para usuarios de Windows, puede usar la herramienta CurrPorts para eliminar puertos en uso fácilmente:
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.
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 PID
funciona 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í:
netstat -ano | findstr :PORT
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.
kill
. Publicaré aquí si encuentro.
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
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 ~/.bashrc
función:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
y simplemente corre
killport 8080
Podemos evitar esto simplemente reiniciando IIS, utilizando el siguiente comando:
IISRESET