2008-10-10 8 views
24

El control de procesos de Java es notoriamente malo, principalmente debido a la compatibilidad inadecuada de las clases Java VM/JDK (por ejemplo, java.lang.Process).Buena biblioteca de control de procesos de Java

Me pregunto, ¿hay alguna buena biblioteca de código abierto que sea confiable?

Los requisitos serían:

  1. OSS
  2. Start/Stop procesa
  3. Administrar entrada y salida estándar
  4. plataforma cruzada (por lo menos Linux, Windows, Solaris, HP e IBM en ese orden)
  5. (opcional) reiniciable
  6. (deseable) maduro
+0

Agregaría una noción de dependencia del proceso como un requisito: Un proceso/servicio solo debería comenzar si su proceso/servicio dependiente ha comenzado. Si se detiene un proceso/servicio, se detienen todos sus procesos/servicios dependientes. –

+0

Ahora es 2015. Me pregunto si algo ha cambiado y la respuesta a esta pregunta ahora sería diferente. – wilx

Respuesta

4

Java Service Wrapper podría ser lo que estás buscando. Es multiplataforma, se puede utilizar para iniciar cosas como un servicio de Windows, capturar IO y, en general, administrar por completo cualquier aplicación java. Es muy ligero y está bien diseñado. Atlassian lo usa para envolver sus productos (Jira, Bamboo, etc.), por lo que es probado en batalla.

+2

para la gestión del servicio está bien. pero difícilmente es una biblioteca que se puede usar para un control de proceso sencillo. también, no es completamente OSS. –

+0

@Omry JSW tiene una muy buena biblioteca de control de procesos (http://wrapper.tanukisoftware.com/doc/english/child-exec.html), el problema es que no es OSS. – jnorris

13

¿Qué tal Apache Commons Exec?

+1

¡Buen consejo, buen tutorial! http://commons.apache.org/exec/tutorial.html – grrussel

+1

No creo que Apache Commons Exec proporcione el mismo nivel de abstracción que Java Service Wrapper. Para implementar un administrador de procesos/daemon, Commons Exec podría ser un buen comienzo. –

3

Un requisito más ... soporte de plataforma cruzada para eliminar un proceso huérfano. Con java.lang.Process (y Apache Commons Exec), no hay manera de matar procesos externos cuando la aplicación Java hace una parada (kill -9). Realmente me gustaría encontrar una biblioteca que pueda manejar mejor el problema.

Una solución puede ser almacenar los PID en algún recurso en el disco, y luego matar los procesos al reiniciar la aplicación Java. Por supuesto, esto dependería de la plataforma, por lo que una buena biblioteca multiplataforma sería fantástica.

Cuestiones relacionadas