Supomos que você tenha uma chamada de sistema que funciona quando você chama a partir do terminal. Se você executá-la com ProcessBuilder ou Runtime.getRuntime().exec(), e ela não funcionar (como funciona quando é chamada a partir do terminal) você deve estar enfrentando problemas na leitura dos streams (stdout/stderr) de saída do seu comando…

Como dito em http://alvinalexander.com/java/java-exec-processbuilder-process-3, se você não ler esses streams, sua chamada de sistema pode ser bloqueada.

“Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.”

Já que a mesma linha em Java consegue executar outras chamadas de sistemas (com stream de saída menores), podemos ficar tentados a achar que o problema não está no nosso código. Mas de fato está, no modo em como lidamos com esses streams de saída.

Portanto, estou compartilhando este link (http://alvinalexander.com/java/java-exec-processbuilder-process-3), que pode ajudar pessoas a solucionar seu problema, assim como o meu foi solucionado.

Anúncios