Saltar al contenido

La forma correcta de matar un proceso en Java

Necesitamos tu apoyo para extender nuestros posts acerca de las ciencias informáticas.

Solución:

Si el proceso que desea eliminar ha sido iniciado por su aplicación

Entonces probablemente tengas una referencia a él (ProcessBuilder.start() o Runtime.exec() ambos devuelven una referencia). En este caso, simplemente puede llamar p.destroy(). Creo que esta es la forma más limpia (pero tenga cuidado: los subprocesos iniciados por p puede seguir con vida, consulte http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4770092 para obtener más información).

El destroyForcibly solo debe usarse si destroy() falló después de un cierto tiempo de espera. En una palabra

  1. terminar el proceso con destroy()
  2. permitir que el proceso finalice correctamente con un tiempo de espera razonable
  3. matarlo con destroyForcibly() si el proceso sigue vivo

Si el proceso que desea eliminar es externo

Entonces no tiene muchas opciones: debe pasar a través de la API del sistema operativo (Runtime.exec). En Windows, el programa para llamar será taskkill.exemientras que en Mac y Linux puedes probar kill.


Eche un vistazo a https://github.com/zeroturnaround/zt-exec/issues/19 y Matar un proceso usando Java y http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app- kill-any-process-after-specified-time-0133513/ para obtener más información.

Si está tratando de eliminar el proceso principal que inició su código Java, le sugiero que use System.exit(). Los beneficios se explican aquí: ¿cuándo debemos llamar a la salida del sistema en Java?

Esencialmente, System.exit() ejecutará ganchos de apagado que se asegurarán de que cualquier proceso dependiente que no sea un demonio que no haya completado su trabajo se elimine antes de que se elimine su proceso. Esta es la forma limpia de hacerlo.

Si el proceso no es suyo, tendrá que confiar en el sistema operativo para que haga este trabajo por usted, como se explica en esta respuesta: Matar un proceso usando Java

En ese caso, su sugerencia de Runtime.exec() matar a *nix sería una forma decente de hacerlo.

Ahora en cuanto a destroyForcibly()normalmente llamará a eso en un proceso secundario generado por su código Java que presumiblemente se inició con la API del proceso ProcessBuilder.start() o Runtime.exec()

el que me funcionó es System.exit(0); funciona bien porque cierra todos los procesos y componentes que aún se están ejecutando

Reseñas y valoraciones

Te invitamos a añadir valor a nuestro contenido informacional colaborando tu veteranía en las reseñas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *