there the running run from close batch and windows batch-file process kill-process

windows - the - Mata un proceso mirando el puerto que está utilizando desde un.BAT



taskkill access denied (14)

En Windows, ¿qué puede buscar el puerto 8080 e intentar eliminar el proceso que está utilizando a través de un archivo .BAT?


Abra el símbolo del sistema y ejecute los siguientes comandos

C:/Users/username>netstat -o -n -a | findstr 0.0:3000 TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116 C:/Users/username>taskkill /F /PID 3116

, aquí 3116 es la identificación del proceso


Aquí hay un comando para comenzar:

FOR /F "tokens=4 delims= " %%P IN (''netstat -a -n -o ^| findstr :8080'') DO @ECHO TaskKill.exe /PID %%P

Cuando tenga confianza en su archivo por lotes, elimine @ECHO .

FOR /F "tokens=4 delims= " %%P IN (''netstat -a -n -o ^| findstr :8080'') DO TaskKill.exe /PID %%P

Tenga en cuenta que puede necesitar cambiar esto ligeramente para diferentes sistemas operativos. Por ejemplo, en Windows 7 puede necesitar tokens=5 lugar de tokens=4 .

Cómo funciona esto

FOR /F ... %variable IN (''command'') DO otherCommand %variable...

Esto le permite ejecutar el command y recorrer su salida. Cada línea se rellenará con la %variable y se puede expandir en otro otherCommand tantas veces como desee, donde quiera. %variable en uso real solo puede tener un nombre de una sola letra, por ejemplo, %V

"tokens=4 delims= "

Esto le permite dividir cada línea por espacios en blanco, y tomar el 4to. Trozo en esa línea, y rellenarlo con la %variable (en nuestro caso, %%P ). delims parece vacío, pero ese espacio extra es realmente significativo.

netstat -a -n -o

Solo ejecútalo y descúbrelo. De acuerdo con la ayuda de la línea de comandos, "Muestra todas las conexiones y puertos de escucha", "Muestra direcciones y números de puertos en forma numérica" ​​y "Muestra el ID del proceso de propiedad asociado con cada conexión". Acabo de utilizar estas opciones ya que alguien más lo sugirió y funcionó :)

^|

Esto toma la salida del primer comando o programa ( netstat ) y lo pasa a un segundo programa de comando ( findstr ). Si estuviera usando esto directamente en la línea de comando, en vez de dentro de una cadena de comando, usaría | en lugar de ^| .

findstr :8080

Esto filtra cualquier salida que se pase a ella, devolviendo solo líneas que contengan :8080 .

TaskKill.exe /PID <value>

Esto mata una tarea en ejecución, usando la ID del proceso.

%%P instead of %P

Esto es obligatorio en los archivos por lotes. Si hiciera esto en el símbolo del sistema, usaría %P lugar.


Consulte qué proceso está escuchando el puerto: ¿cómo puede averiguar qué proceso está escuchando en un puerto de Windows?

Mátalo: ¿ alguna forma de escribir un archivo .bat de Windows para matar procesos?


El uso de la solución de Merlyn provocó la muerte de otras aplicaciones como Firefox. Estos procesos usaban el mismo puerto, pero no como un oyente:

p.ej:

netstat -a -n -o | findstr :8085 TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 6568 TCP 127.0.0.1:49616 127.0.0.1:8085 TIME_WAIT 0 TCP 127.0.0.1:49618 127.0.0.1:8085 TIME_WAIT 0

Por lo tanto, puede excluir estos agregando "LISTENING" al findstr de la siguiente manera:

FOR /F "tokens=5 delims= " %%P IN (''netstat -a -n -o ^| findstr :8085.*LISTENING'') DO TaskKill.exe /PID %%P


Gracias a todos, solo para agregar que algún proceso no se cerrará a menos que el interruptor de fuerza / F también se envíe con TaskKill. También con el modificador / T, todos los subprocesos secundarios del proceso se cerrarán.

C:/>FOR /F "tokens=5 delims= " %P IN (''netstat -a -n -o ^| findstr :2002'') DO TaskKill.exe /PID %P /T /F

Para los servicios será necesario obtener el nombre del servicio y ejecutar:

sc stop ServiceName


Para encontrar un proceso específico en la línea de comando use el siguiente comando aquí 8080 es el puerto utilizado por el proceso

netstat -ano | findstr 8080

para matar el uso del proceso debajo del comando aquí 21424 es la identificación del proceso

taskkill /pid 21424 /F


Para enumerar todo el proceso que se ejecuta en el puerto 8080 haga lo siguiente.

netstat -ano | encontrar "8080"

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612 TCP [::]:8080 [::]:0 LISTENING 10612

Luego, para matar el proceso, ejecute el siguiente comando

taskkill / F / PID 10612


Pasos:

  1. Ve a la carpeta conf de tu servidor apache tomcat . En mi caso, es apache-tomcat-7.0.61/conf ya que estoy usando apache-tomcat-7.0.61

  2. Abra server.xml y cambie el número de puerto de 8080 a cualquier otro puerto como desee. Por ejemplo: 8081,8082,8087 etc.

  3. Ahora ve a la carpeta bin y ejecuta shutdown.bat

  4. Ahora reinicie el servidor a través de eclipse.

Ahora su proyecto funcionará sin interrupción.


Pegar esto en la línea de comando

FOR /F "tokens=5 delims= " %P IN (''netstat -ano ^| find "LISTENING" ^| find ":8080 "'') DO (TASKKILL /PID %P)

Si desea usarlo en un lote pu %%P vez de %P


Si alguien está buscando una secuencia de comandos Powershell:

function Search-And-Destroy { param ( [Parameter(Mandatory=$true)][string]$port ) $lines = netstat -a -o -n | findstr $port $ports = @() ForEach($line In $lines) { $res = $($lines -split ''/s+'') $ports += $res[5] } $ports = $ports | select -uniq ForEach($port In $ports) { echo $(taskkill /F /PID $port) } }

Esta función básicamente hace lo que hacen las funciones anteriores, pero está en el formato de scripting de Powershell para que pueda agregarlo a su perfil de Powershell. Para encontrar la ubicación de su perfil, vaya a powershell y escriba echo $profile


Si quiere matar el proceso que está escuchando en el puerto 8080, podría usar PowerShell. Simplemente combine el cmdlet Get-NetTCPConnection con Stop-Process .

Probado y debería funcionar con PowerShell 5 en Windows 10 o Windows Server 2016. Sin embargo, supongo que también debería funcionar en versiones anteriores de Windows que tengan instalado PowerShell 5.

Aquí hay un ejemplo:

PS C:/> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess Confirm Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):


Similar a la respuesta de Merlyn, pero esta maneja estos casos también:

  • El número de puerto es en realidad una subcadena izquierda de otro número de puerto más largo que no está buscando. ¡Desea buscar un número de puerto exacto para que no mate un proceso aleatorio e inocente!
  • El código de script debe poder ejecutarse más de una vez y ser correcto cada vez, sin mostrar respuestas antiguas e incorrectas.

Aquí está:

set serverPid= for /F "tokens=5 delims= " %%P in (''netstat -a -n -o ^| findstr /E :8080 '') do set serverPid=%%P if not "%serverPid%" == "" ( taskkill /PID %serverPid% ) else ( rem echo Server is not running. )


Solo para completar:

Quería matar todos los procesos conectados a un puerto específico, pero no el proceso de escuchar

el comando (en cmd shell) para el puerto 9001 es:

FOR /F "tokens=5 delims= " %P IN (''netstat -ano ^| findstr -rc:":9001[ ]*ESTA"'') DO TaskKill /F /PID %P

findstr :

  • r es para expresiones yc para cadena exacta para coincidir.
  • [] * es para espacios coincidentes

netstat :

  • a -> todo
  • n -> no resolver (más rápido)
  • o -> pid

Funciona porque netstat imprime el puerto de origen y luego el puerto de destino y luego ESTABLISHED


si por sistema no puede terminar la tarea. prueba este comando

x:> net stop http / y