Bom dia !!!
pessoal estou com um problema que é o seguinte, preciso que um programa rode em segundo plano no linux em modo texto, bom o progama é um socket server, ele esta funcionando ok mas agora que quero implementar nas maqs ele não pode rodar em primeiro plano , ja tentei extender a classe de thread e usar o setDaemon(true) , porém ele continua rodando em primeiro plano, sem liberar o cursos para o usuario prosseguir, segue ai meu codigo
Sinceramente acho q vc não deve utilizar — thread.setDaemon(true); —
Apenas thread.start(), assim sua thread vai ficar rodando , a não ser q vc te trate para que ela tenha um “sleep” após um tempo determinado.
M
mackalisterPJ
acho que o problema não esta na parte de thread.setDaemon(true)
pq quando eu dou um sleep no programa que cria a thread a thread fica rodando mas quando o programa principal morre a thread morre junto 1!!!
estou precisando de uma forma de manter a thread viva depois que o programa qua a cria morre !!!
blz !!
W
wgodoiPJ
Então é o seguinte, não sei exatamente como o seu programa roda, mas se rodar a partir de um webserver vc pode criar uma servlet que simplesmente chame sua classe que incia a thread.
Vai no web.xml da aplicação e implementa a servlet com a propriedade load-on-startup, assim :
Criei uma aplicação que roda em backgound paralelamente a uma outra aplicação web, funciona basicamente assim para iniciar minha thread.
Espero que ajude !!!
M
mackalisterPJ
eu não rodo com servlet não , na verdade nem sei fazer com servlet…
é apenas um socket que tem que ficar rodando para que eu acesse a maq atraves dele e execute alguns comandos, ele esta funcionando mas apenas em primeiro plano !!!
valew mas ainda não consegui !!!
A
axPJ
Use isso. Eu testei e deu certo.
publicStringexecComando(String asComando){ Stringretorno=newString(""); try{ Runtimert=Runtime.getRuntime(); Processprcs=rt.exec(asComando); //Executa o comando no shell ou DOS InputStreamReaderisr=newInputStreamReader(prcs.getInputStream()); BufferedReaderbr=newBufferedReader(isr); Stringline; //Learespostadocomandolinhaporlinha.while((line = br.readLine()) != null) retorno+=line+"\n"; }catch(IOException ioe){ System.out.println(ioe.getMessage()); } returnretorno; } }
M
mackalisterPJ
tudo bem mas ele tambem roda em primeiro plano
eu Preciso de uma forma de FAZER O PROCESSO RODAR EM SEGUNDO PLANO, e continue assim , mesmo que a classe que o chamou tenha morrido !!!
A
axPJ
??? Eu testei fazendo com que essa aplicação X, rodasse uma outra aplicação Y e dps finalizei a aplicação X. Mesmo assim a aplicação Y não foi finalizada.
Se vc prestar a atenção nesse código, vc vai ver que ele cria um novo processo, independente do processo invocador.
Vc chegou a testar isso na sua aplicação?
M
mackalisterPJ
valeu pela ajuda ai !!! realmente funcionou !!! eu criei um programa para chamar meu programa java ai ele fica em segundo plano !!
valew
fui !!
A
AndersonAugustoPJ
Cara,
tava dando uma olhada aqui!
Pra vc rodar pelo linux, sem ser pelo java, é só colocar “&” no final da linha de comando, que ele roda em background!
Mas se vc quizer conferir o resultado gerado é só usar nohup!
nohup./Comando&
Ele gera um numero pra vc que é o PID do prodrocesso!
Ai quando acabar de rodar ele gera um arquivo nohup.out, que é um texto com o resultado do console!
Sei que vc ja resolveu via JAVA, mais via LINUX é assim!
FLoW!!!