Matar un proceso usando Java

Resuelto Jeel Shah asked hace 13 años • 8 respuestas

Me gustaría saber cómo "matar" un proceso que se ha iniciado. Conozco la API de proceso, pero no estoy seguro de si puedo usarla para "matar" un proceso que ya se está ejecutando, como firefox.exe, etc. Si se puede usar la API de proceso, ¿podría indicarme la dirección correcta? Si no, ¿cuáles son las otras opciones disponibles? Gracias.

Jeel Shah avatar Jun 15 '11 17:06 Jeel Shah
Aceptado

Si inicia el proceso desde su aplicación Java (por ejemplo, llamando Runtime.exec()a o ProcessBuilder.start()), entonces tendrá una Processreferencia válida y podrá invocar el destroy()método en Processla clase para finalizar ese proceso en particular.

Pero tenga en cuenta que si el proceso que invoca crea nuevos subprocesos, es posible que no se finalicen (consulte https://bugs.openjdk.org/browse/JDK-4770092 ).

Por otro lado, si desea eliminar procesos externos (que no generó desde su aplicación Java), entonces una cosa que puede hacer es llamar a las utilidades O/S que le permiten hacerlo. Por ejemplo, puede probar un comando Runtime.exec()on killen Unix/Linux y verificar los valores de retorno para asegurarse de que la aplicación se eliminó o no (0 significa éxito, -1 significa error). Pero eso, por supuesto, hará que la plataforma de su aplicación dependa.

Yohan Liyanage avatar Jun 15 '2011 10:06 Yohan Liyanage

En Windows, puedes usar este comando.

taskkill /F /IM <processname>.exe 

Para matarlo con fuerza, puedes usar;

Runtime.getRuntime().exec("taskkill /F /IM <processname>.exe")
Laksitha Ranasingha avatar Jul 06 '2012 17:07 Laksitha Ranasingha

AFAIU java.lang.Process es el proceso creado por el propio Java (como Runtime.exec('firefox'))

Puede utilizar comandos dependientes del sistema como

 Runtime rt = Runtime.getRuntime();
  if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) 
     rt.exec("taskkill " +....);
   else
     rt.exec("kill -9 " +....);
Sergei Chicherin avatar Jun 15 '2011 10:06 Sergei Chicherin