Pessoal estou rodando uma instrução atraves da classe Runtime no linux. Ja usei a ProcessBuilder tambem, mas o erro é o mesmo.
Acontece que ela interrompe o processo do nada, nao da exception nao faz nada é como se alguem desse um kill nesse processo.
O codigo que eu uso é simples de tudo
ProcessBuilder pb = new ProcessBuilder("comando que eu executo");
try {
Scanner scanner = new Scanner(pb.start().getInputStream());
// aqui a aplicacao para, porem ela executa por um determinado tempo normal, depois para derrepente
while(scanner.hasNext()){
System.out.println(scanner.nextLine());
}
// o codigo nunca chega aqui
} catch (Exception e) {
e.printStackTrace();
// nem aqui
}
// nem aqui
Alguem ja viu isso?
O problema eh que, provavelmente o processo que roda o seu programa esta tentando escrever para stdout ou stderr.
Isso causa o seu programa “travar”.
A solucao mais simples eh usar o metodo redirectErrorStream do ProcessBuilder. Isso eh “setado” falso por default, mas se vc colocar “true” significar que output e error vao utilizar a mesma stream.
Tenta adicionar isso no seu codigo e veja se funciona.
Ai vai o seu codigo modificado:
ProcessBuilder pb = new ProcessBuilder("comando que eu executo");
pb.redirectErrorStream(true); // adiciona isso no seu codigo.
try {
Scanner scanner = new Scanner(pb.start().getInputStream());
while(scanner.hasNext()){
System.out.println(scanner.nextLine());
}
} catch (Exception e) {
e.printStackTrace();
}
//Daniel
Entendi, vou testar aqui e mais tarde falo o resultado.
Obrigado!
Fiz o teste aqui e o problema continua.
O processo que tento rodar é o sql plus. São sempre 3 arquivos .sql.
O primeiro passa normal e o segundo começa a passar e para no meio do caminho, sem exception, sem mensagem, sem nada.
Outra sugestão?
so pra constar no autos rsss
A instrução funciona perfeitamente no windows.
Ooook. Entao funciona no windows mas trava no linux. =/
Estranho… =/
Infelizmente agora eu nao tenho nenhuma maquina linux para testar, mas quando eu chegar em casa eu tento fazer uns testes.
//Daniel
Soh pra testar tentar rodar a parte que vc le a stream em outra thread.
//Daniel
Cara consegui resolver.
So risadas, tinha um maldito de um processo no servidor linux com um comando killall java que matava minha aplicaçao exatamente no momento que rodava o comando no runtime, foi tenso! hauhauhau
Obrigado mesmo pela sua ajuda!
tenha um otimo feriado!
Opa! Legal que funcionou!
Feliz em ter ajudado!
t+
