Ho cercato di utilizzare ProcessBuilder di Java per avviare un'applicazione in Linux che dovrebbe essere eseguita "a lungo termine". Il modo in cui questo programma viene eseguito è quello di avviare un comando (in questo caso, sto lanciando un'applicazione di riproduzione multimediale), consentirne l'esecuzione e controllare che non si sia arrestato in modo anomalo. Ad esempio, controlla se il PID è ancora attivo, quindi riavvia il processo, se è morto.ProcessBuilder Java: blocchi di processo risultanti
Il problema che sto ottenendo in questo momento è che il PID rimane attivo nel sistema, ma la GUI per l'applicazione si blocca. Ho provato a spostare ProcessBuilder (cmd) .start() in un thread separato, ma questo non sembra risolvere nulla, come speravo sarebbe successo.
Fondamentalmente il risultato è che, per l'utente, il programma APPARE che si è arrestato in modo anomalo, ma l'abbattimento del processo Java che guida il processo ProcessBuilder.start() consente effettivamente al processo creato di riprendere il suo normale comportamento. Ciò significa che qualcosa nell'applicazione Java sta interferendo con il processo generato, ma non ho assolutamente idea di cosa, a questo punto. (Quindi perché ho provato a separarlo in un altro thread, che non sembra risolvere nulla)
Se qualcuno ha qualche input/pensieri, per favore fatemelo sapere, perché non posso per la vita di me pensare a come risolvere questo problema.
Modifica: non ho alcuna preoccupazione per il flusso I/O creato dal processo e non ho quindi adottato alcuna procedura per affrontarlo, potrebbe causare un blocco nel processo stesso?
Dato che hai già affermato che non hai a che fare con i flussi del processo, devo dire che "Sì, è molto probabile che sia la causa del problema. È importante leggere il contenuto di stdout e stderr, e scrivi anche su stdin se il bambino si aspetta che tu ". Varrà la pena di controllare questa domanda SO: http://stackoverflow.com/questions/882772/capturing-stdout-when-calling-runtime-exec/882795#882795 –