Fala srs;
Pessoal tenho uma dúvida e um problema tb.
Eu tenho um programa JAVA que faz várias coisas de tempos em tempos, ou seja, ele nunca morre.
No final de cada ciclo (acontece de 24h em 24h) eu uso o Runtime.getRuntime().exec("") para executar um outro programa JAVA (JAR).
Esse outro programa inicializa, faz o que tem que fazer e termina…porém quando olho no TaskManager do Windows eu vejo que a Instância Java que foi criada para ele está lá, ou seja, fico com 2 programas JAVA rodando, 1 que é o programa que nunca morre (este está correto) e 1 para esse que foi chama, fez o que tinha que fazer mas não morre…ou seja, estou ocupando memória da máquina e pior que isso pois depois de 24h vai ser criado uma outra instancia para ele e no final vou ficar com 3 programas JAVA… :?: :?: :?:
Alguém sabe o por que e como resolver o problema… Até ?
Como vc esta usando o Runtime ???
Esta criando o Process ???
Talvez esse tópico ajude:
Postei um código da maneira correta de se executar outro processo. Veja se assim fica travado ou não…
Pode ser também que esteja faltando um System.exit no seu programa Java e por algum motivo ele esteja ficando preso.
Eu uso simplesmente assim;
Runtime.getRuntime().exec("java -jar outro_programa.jar");
Vi que você usa um waitFor(), mas vi pelo JavaDoc que é para esperar a finalização do programa que foi chamado terminar para seguir em frente com o programa que é o ‘chamador’. Ou seja, sincronizar os dois (bloquear).
No meu caso eu não preciso esperar o outro terminar, mesmo por que o programa que chama nunca morre ou seja ele não vai morrer antes do outro o que acarreta o fim do que foi chamado.
O que eu quero fazer é:
O programa A chama o programa B
O programa B começa a fazer o que tem que fazer
Em quanto isso o Programa A segue com a vida dele, ou seja não espera retorno de A
Quando B terminar de fazer o que tem que fazer ele simplesmente morre e se eu olhar no Task Manager não pode ter mais o Java.exe dele como está acontecendo…
Eu tentei colocar um System.exit(0) no Programa B mas ainda assim quando ele termina de executar fica o Java.exe dele ainda lá no TaskManager do Windows.
Opa falei bobeira acima…
Com o System.Exit(0) no programa B funcionou…vlw…