Monitorar um processo

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.

Se alguém puder me ajudar!!!

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:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Process.html#waitFor()

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.

como eu faço um comando que não precise do start. Tem como fazer isso?? Abrir um arquivo deixando o processo dependente do java???

Tem como dar um exemplo mais concreto? Eu nao consigo imaginar nenhum comando que precise do start, mesmo pq no Linux/Mac nem tem start :slight_smile:

é 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???

Uhm, resposta curta e grossa? Voce ta na merda :?

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…

em linux também resolvi o problema, criei um arquivo .sh e dentro dele eu fiz a chamada para os gerenciadores de arquivos.

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?

Agradeço qualquer ajuda, abraços!

Se eu não me engano, tem algo assim no JDIC. Dá uma olhada e vê se te ajuda.

Já solucionei, o problema é que devemos tratar o Runtime como um processo, não como uma linha de comando.