Alguém pode me dizer como se pode monitorar um processo. Eu tenho uma aplicação que abre qualquer aplicativo que o sistema operacional conseguir, tanto no Windows quanto no Linux. Mas eu gostaria de saber quando o processo é encerrado, ou seja, quando o arquivo é fechado. Se alguém tiver alguma luz, por favor me falem.
Hoje em dia estou utilizando o seguinte código:
Process teste = executor.exec("comando para abrir arquivo");
teste.waitfor()
mas ele não obtém sucesso pois o comando para abrir o arquivo possui um start, que abre um subprocesso. Eu acho que é por causa disso que a aplicação não espera o arquivo ser fechado, ou seja o processo ser encerrado.
Process.waitFor() retorna o valor de retorno do processo, o que ja pode ajudar, ja que normalmente os processos quando executam normalmente retornam 0, e qualquer valor diferente disso indica um erro:
Quanto ao ‘start’, voce vai ter que tirar ele dali se quiser esperar pelo fim do processo, ja que tudo que o start faz eh abrir o subprocesso numa thread separada do SO (eu provavelmente nao estou usando a terminologia correta aqui), e retorna imediatamente.
é o seguinte eu estou utilizando alguns comandos distintos. Depende de cada gerenciador de browser. Se for no Linux eu tento abrir primeiro com o comando:
Process teste = executor.exec("nautilus c:\teste.doc")
se não der certo utilizo o comando:
Process teste = executor.exec("kfm c:\teste.doc")
se for windows utilizo:
Process teste = executor.exec("cmd /C start c:\teste.doc")
se o windows for 98 ou 95 utilizo:
Process teste = executor.exec("start c:\teste.doc")
e todos eles criam subprocessos. Eu teria que achar um comando ou outra classe que abrisse os documentos diretamente deixando esses processos dependentes da minha aplicação. Alguma idéia???
Metade do problema resolvido, viajei, era soh ter tirado o start no caso do windows, mas no linux continua o problema… Então a dúvida agora é:
Como abrir um arquivo em Linux, sendo que vc não sabe a extensão do arquivo. Pode ser um .doc, um .pdf, um .ppt, ou seja, qualquer coisa. Como fazer isso em Linux???
Resumindo, nao tem jeito de fazer isso de uma forma generica no Linux (no Mac, acho que rola disparar o Finder e ver no que da). Voce vai ter que confiar que o usuario esta usando KDE ou Gnome e confiar no bom-senso do KFM ou do Nautilus…
Olá pessoal. Eu tenho tido problemas com o controle do processo. Eu uso o seguinte código em um programa:
[code]
Runtime rtime = Runtime.getRuntime();
Process filho = rtime.exec(linhadecomando);
System.out.println(“Aguarde o termino do processo.”);
filho.waitFor();
System.out.println(“Processo terminado!”);[/code]
Dependendo da duração da execução deste processo, o processo fica travado, daí a mensagem de que ele foi terminado não é exibida. Eu verifico os processos que estão sendo executados e vejo que o mesmo continua lá, mas não tem mais funcionalidade.
Se eu uso o processo pelo shell mesmo, ele executa sem problemas por completo. Alguém sabe como contornar este tipo de problema?