java runtime subprocess shutdown process-management

¿Cómo me deshago de los procesos hijos de Java cuando mi aplicación Java se cierra/falla?



runtime subprocess (2)

Lanzo un proceso hijo en Java de la siguiente manera:

final String[] cmd = {"<childProcessName>"}; Process process = Runtime.getRuntime().exec(cmd);

Ahora se ejecuta en segundo plano. Todo bien y bien.

Si mi programa ahora se cuelga (todavía está en dev :-)), el proceso hijo todavía parece estar suspendido. ¿Cómo puedo hacer que termine automáticamente cuando el proceso principal de Java muere?

Si ayuda, estoy usando Mac OS X 10.5


Ya lo resolví yo mismo. Agrego un gancho de cierre, de la siguiente manera:

final String[] cmd = {"<childProcessName>"}; final Process process = Runtime.getRuntime().exec(cmd); Runnable runnable = new Runnable() { public void run() { process.destroy(); } }; Runtime.getRuntime().addShutdownHook(new Thread(runnable));


Como dijiste, addShutdownHook es el camino a seguir.

PERO:

  • No hay garantía real de que sus ganchos de apagado se ejecuten si el programa finaliza. Alguien podría matar el proceso de Java y en ese caso su gancho de cierre no se ejecutará. (como se dice en esta pregunta SO )

  • algunas de las bibliotecas estándar tienen sus propios ganchos que pueden ejecutarse antes que los tuyos.

  • ten cuidado con los bloqueos.

Otra posibilidad sería envolver su programa Java en un servicio .