2008-10-10 2 views
24

Le contrôle de processus Java est notoirement mauvais - principalement en raison d'un support inadéquat par les classes Java VM/JDK (par exemple, java.lang.Process).Good Java Process Control Library

Je me demande s'il existe de bonnes bibliothèques open source fiables.

Les exigences seraient:

  1. OSS
  2. Start/Stop traite
  3. Manage STDIN et STDOUT
  4. multi-plateforme (au moins Linux, Windows, Solaris, HP et IBM cet ordre)
  5. (facultatif) redémarrage
  6. (souhaitable) mature
+0

J'ajouterais une notion de dépendance de processus comme exigence: Un processus/service ne devrait démarrer que si son processus/service dépendant a démarré. Si un processus/service est arrêté, tous ses processus/services dépendants sont arrêtés. –

+0

Nous sommes en 2015. Je me demande si quelque chose a changé et que la réponse à cette question serait différente. – wilx

Répondre

4

Java Service Wrapper peut être ce que vous cherchez. Il est multi-plateforme, peut être utilisé pour démarrer les choses en tant que service Windows, capturer les E/S, et généralement gérer complètement toute application Java. C'est très léger et bien conçu. Atlassian l'utilise pour emballer leurs produits (Jira, Bamboo, etc.), donc c'est un test de bataille.

+2

pour la gestion du service c'est bien. mais c'est à peine une bibliothèque qui peut être utilisée pour un contrôle de processus facile. aussi, ce n'est pas tout à fait OSS. –

+0

@Omry JSW a une très bonne bibliothèque de contrôle de processus (http://wrapper.tanukisoftware.com/doc/english/child-exec.html), le problème est que ce n'est pas OSS. – jnorris

13

Que diriez-vous de Apache Commons Exec?

+1

Bon conseil - bon tutoriel, aussi! http://commons.apache.org/exec/tutorial.html – grrussel

+1

Je ne pense pas qu'Apache Commons Exec fournisse le même niveau d'abstraction que Java Service Wrapper. Pour mettre en œuvre un gestionnaire de processus/démon, Commons Exec pourrait être un bon début. –

3

Une exigence supplémentaire ... le support multi-plateforme pour la suppression d'un processus orphelin. Avec java.lang.Process (et Apache Commons Exec), il n'y a aucun moyen de tuer les processus externes lorsque l'application Java s'arrête (kill -9). J'aimerais vraiment trouver une bibliothèque qui puisse mieux gérer le problème.

Une solution peut être de stocker des PID dans certaines ressources sur le disque, puis de les supprimer au redémarrage de l'application Java. Bien sûr, cela dépendrait de la plateforme, donc une bonne bibliothèque multi-plateformes serait fantastique.