He intentado usar Java ProcessBuilder para iniciar una aplicación en Linux que debería ejecutarse "a largo plazo". La forma en que se ejecuta este programa es lanzar un comando (en este caso, estoy iniciando una aplicación de reproducción de medios), permitir que se ejecute y verificar que no se haya bloqueado. Por ejemplo, verifique si el PID todavía está activo, y luego reinicie el proceso, si ha muerto.Java ProcessBuilder: El proceso resultante se bloquea
El problema que estoy recibiendo ahora es que el PID permanece vivo en el sistema, pero la GUI de la aplicación se cuelga. Traté de cambiar el ProcessBuilder (cmd) .start() en un hilo separado, pero eso no parece resolver nada, como esperaba que fuera.
Básicamente el resultado es que, para el usuario, el programa APARECE que se ha bloqueado, pero matar el proceso de Java que impulsa el Proceso ProcessBuilder.start() realmente permite que el Proceso creado reanude su comportamiento normal. Esto significa que algo en la aplicación Java está interfiriendo con el Proceso engendrado, pero no tengo ni idea de qué, en este momento. (Por lo tanto, por qué traté de separarlo en otro hilo, que no parecía resolver nada)
Si alguien tiene alguna opinión/pensamientos, hágamelo saber, ya que no puedo, por la vida de mi pensar en cómo para resolver este problema.
Editar: No me preocupa el flujo de E/S creado a partir del Proceso, y por lo tanto no he tomado medidas para solucionarlo, ¿podría esto provocar un bloqueo en el Proceso mismo?
Como ya ha indicado que no está tratando con las secuencias del proceso, debo decir que "Sí, es muy probable que sea la causa del problema. Es importante leer el contenido de stdout y stderr, y también escribe en stdin si el niño espera que lo haga ". Valdría la pena comprobar esta pregunta ASÍ: http://stackoverflow.com/questions/882772/capturing-stdout-when-calling-runtime-exec/882795#882795 –