Pregunta

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 falla ( está todavía en dev :-)), el proceso secundario todavía parece quedarse. ¿Cómo puedo hacer que finalice automáticamente cuando el proceso Java principal muere?

Si ayuda, estoy usando Mac OS X 10.5

¿Fue útil?

Solución

Como dijiste, addShutdownHook es el camino a seguir.

PERO:

  • No existe una 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 no se ejecutará su gancho de apagado. (como se dice en esta pregunta SO )

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

  • cuidado con los puntos muertos.

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

Otros consejos

Ya lo resolví yo mismo. Agrego un gancho de apagado, 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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top