Question

Je lance un processus enfant en Java comme suit:

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

Il fonctionne maintenant en arrière-plan. Tout va bien.

Si mon programme se bloque maintenant (il est toujours dans dev :-)), le processus enfant semble toujours traîner. Comment puis-je le faire se terminer automatiquement lorsque le processus Java parent meurt?

Si cela peut aider, j'utilise Mac OS X 10.5

Était-ce utile?

La solution

Comme vous l'avez dit, addShutdownHook est la voie à suivre.

MAIS:

  • Rien ne garantit vraiment que vos crochets d'arrêt seront exécutés si le programme se termine. Quelqu'un pourrait tuer le processus Java et dans ce cas, votre hook d'arrêt ne sera pas exécuté. (comme indiqué dans cette question SO )

  • certaines des bibliothèques standard ont leurs propres hooks qui peuvent s'exécuter avant les vôtres.

  • méfiez-vous des blocages.

Une autre possibilité consisterait à envelopper votre programme Java dans un service .

Autres conseils

Je l'ai déjà résolu moi-même. J'ajoute un crochet d'arrêt, comme suit:

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top