2010-04-15 17 views
18

Soy un novato en cmd, así que permítanme hacer una pregunta estúpida: ¿cómo podemos detener un proceso en ejecución de Java a través de cmd de Windows?¿Cómo podemos detener un proceso java en ejecución a través de cmd de Windows?

Por ejemplo, si partimos Jetty (un servidor web mini) con el siguiente comando:

start javaw -jar start.jar 

¿Cómo encontramos el proceso y detener más tarde?

Obviamente el comando siguiente no funciona:

stop javaw -jar start.jar 
+4

¿Usted intentó 'Ctrl + C 'o' Ctrl + Break'? –

+0

sí, pero ¿puedo construir un archivo .bat para detenerlo con Ctrl + C o Ctrl + Break? –

+2

Tal vez verifique el comando taskkill. Tiene muchas opciones para elegir el proceso para matar: por ID de proceso, por patrón de nombre, por usuario propietario, etc. Pero recomiendo primero buscar una forma estándar, menos violenta de cerrar la aplicación específica (los servidores generalmente tienen algún tipo de del comando "detener") –

Respuesta

9

es más bien complicado pero hay que hacer algo como lo siguiente:

START "do something window" dir 
FOR /F "tokens=2" %I in ('TASKLIST /NH /FI "WINDOWTITLE eq do something window"') DO SET PID=%I 
ECHO %PID% 
TASKKILL /PID %PID% 

encontrado esto en this page.

(Este tipo de cosas es mucho más fácil si usted tiene un sistema Unix/Linux ... o si se ejecuta o similares Cygwin en Windows.)

+0

PowerShell también lo hace trivial. – Joey

+1

Si desea eliminar * todos * los procesos de java.exe: 'taskkill/F/IM java.exe/T'. Dicho esto, gracias por el bucle 'FOR' que reutilicé en otro lugar :) – Benj

8

Normalmente no tengo que muchos procesos Java abierta para

taskkill /im javaw.exe 

o

taskkill /im java.exe 

debería ser suficiente. Esto matará a todas las instancias de Java.

+2

' taskkill/f/im java.exe' en mi caso. ¡Gracias por tu respuesta! – lordmegamax

2
FOR /F "tokens=1,2 delims= " %%G IN ('jps -l') DO IF %%H==name.for.the.application.main.Class taskkill /F /PID %%G 

name.for.the.application.main.Class - a reemplazar esta clase principal de la aplicación (se puede encontrar en la segunda columna de jps -l salida)

28

Cuando me encontré con taskkill para detener el proceso javaw.exe sería decir que había terminado, pero se mantuvo corriendo. El proceso de jqs (java qucikstart) debe detenerse también. La ejecución de este archivo por lotes se encargó del problema.

taskkill /f /im jqs.exe 
taskkill /f /im javaw.exe 
taskkill /f /im java.exe 
20

Me gusta este.

wmic process where "name like '%java%'" delete 

En realidad, puede matar un proceso en una máquina remota de la misma manera.

wmic /node:computername /user:adminuser /password:password process where "name like '%java%'" delete 

wmic is awesome!

+0

funciona bien, pero ¿cómo puedo hacerlo funcionar en un archivo por lotes? – Xerus

+0

@Xerus La sintaxis debe ser la misma. La única diferencia que puedo pensar es que es posible que necesite duplicar los signos de porcentaje en la cláusula 'where':' donde 'name' '%% java %%' ''para especificar signos de porcentaje literales como comodines WQL, por lo que su lote script no intentará expandir '% java%' como una variable de proceso por lotes. – rojo

+0

@Xerus Probablemente deberías publicar una nueva pregunta y mostrar lo que está sucediendo en contexto. – rojo

1

inicio javaw -DSTOP.PORT = 8079 = -DSTOP.KEY secreto start.jar-jar

inicio javaw -DSTOP.PORT = 8079 = -DSTOP.KEY start.jar-jar secreto --stop

0

Usted puede hacer esto con PowerShell:

$process = Start-Process "javaw" "-jar start.jar" -PassThru 
taskkill /pid $process.Id 

el comando taskkill se cierre correcto de la aplicación.

0

En caso de que quiera matar no todos los procesos java, sino los jars específicos en ejecución. Funcionará también para varios tarros.

wmic Path win32_process Where "CommandLine Like '%YourJarName.jar%'" Call Terminate 

Else taskkill /im java.exe trabajará para matar todos los procesos Java

0

(en el sistema operativo Windows sin Service) Primavera de arranque de arranque/parada de la muestra.

run.bat

@ECHO OFF 
IF "%1"=="start" (
    ECHO start your app name 
    start "yourappname" java -jar -Dspring.profiles.active=prod yourappname-0.0.1.jar 
) ELSE IF "%1"=="stop" (
    ECHO stop your app name 
    TASKKILL /FI "WINDOWTITLE eq yourappname" 
) ELSE (
    ECHO please, use "run.bat start" or "run.bat stop" 
) 
pause 

start.bat

@ECHO OFF 
call run.bat start 

stop.bat:

@ECHO OFF 
call run.bat stop 
Cuestiones relacionadas