Matar un proceso usando Java
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.
Si inicia el proceso desde su aplicación Java (por ejemplo, llamando Runtime.exec()
a o ProcessBuilder.start()
), entonces tendrá una Process
referencia válida y podrá invocar el destroy()
método en Process
la 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 kill
en 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.
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")
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 " +....);