Parar Processo - Runtime.getRuntime().exec

9 respostas
O

Hail… eu estou com um problemão:

eu executei um .exe no qual esse é um processo que ficará ouvindo em uma determinada porta. Esse mesmo funciona pela shell (dos, unix, tanto faz)… só q para parar este processo simplesmente eu pressiono ctrl+C … blz… isso se esse mesmo for executado diretamente na shell.

Bom eu criei um programa no qual executa esse arquivo através do método Runtime.getRuntime().exec(); ok… ai o processo fica rodando na boa. Através do Gerenciamento de Tarefas ele táh lá. Agora, através de um botão na interface do meu programa eu tenho q PARAR esse processo!!! Mas não sei como?? Alguém tem idéia de como fazer isso??? de preferência trabalhando com a plataforma Windows.

Outra coisa, caso eu fazer a chamada para esse processo através de um arquivo bat??! já q junto com a chamada desse executável eu tenho q passar alguns parâmetros, como numero da porta por exemplo. No arquivo BAT eu colocaria essa linha:

storescp -v 104

a execução através do bat é blz … o problema mesmo está em parar o processo…

A chamada do processo está assim:

Runtime.getRuntime().exec("inicializa.bat");

9 Respostas

L

Não tenho certeza disto, mas ai vai uma ideia, se coloca-lo em um Thread, assim vc pode dar um stop();

Tenta ai, mas desta vez eu nao garanto.

D

tb tenho uma ideia… só nao faço a minima idea se vai funcionar ou não…

olha só…
geralmente a tecla Break do teclado tb pára uma aplicação Shell, assim como o Ctrl+C.
como toda tecla do teclado tem um valor na Tabela ASCII, vc podeia pegar o valor correspondente a essa tecla e fazer um Runtime, executando esse valor Unicode…
talvez… nao tenho certeza, da até pra vc, com valores Unicode, tipo emular um Ctrl+C… hmm… viajei?? hehehe… talvez… mas é uma ideia! :wink:

Caso consiga, ou não, poste novamente aki nesse tópico.
fiquei curioso como resolver esse seu problema! heheeh

flw!
abraços!

O

Hail… bom… sobre a Thread não funciona, pois com o stop apenas paro a threads, mas o processo continua rodando, visto que eu utilizo a thread apenas para iniciar o processo… saka… depois q inicio, quem toma conta dele é o SO… ai phodeu eauheahauh mas valeu a idéia…

L

Vou tentar emendar com a ideia do DanielBadawi, tenta assim como ele falou e usa a classe Robot, para dar um click de tecla tipo CTRL + C, depois me avisa ai.

D

e depois posta aí pra agente saber se deu certo! hehehee
e se deu certo, posta o código de como vc fez aí pra gente! fiquei curioso de como isso deve ser revolvido! :grin:

flw!
abraços!

M

æ olavo_biffi, olha só… Vc duplicou os posts… :???:

Eu respondi algo no link a seguir:
http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&p=43076&highlight=#43076

æ DanielBadawi, blz ? Olha só, bloqueie o post que vc mais achar conveniente, blz ?

Abraço,
Maicon

D

opa…
A solução q o Maicon deu parece ser a melhor, só q a resposta está no outro tópico q vc duplicou.

para acessar: http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&p=43076&highlight=#43076

flw! abraços!

PS.: procure não duplicar tópicos, a resposta sempre chega! :grin:

O

Daeee povo... bom primeiro me desculpe pelo post duplicado, é q eu estava um pouco desesperado com isso... mas agora aos fatos

Realmente a idéia do Maicon funcionou, jogando tudo para um objeto acabo tendo total controle dele... então agora ficou assim:

public void actionPerformed(ActionEvent e){

Object obj = e.getSource();
String[] Args = {"imagectn.exe","-c","C:\OffisServidor\configrc"};

 if(obj == menuSerIniciar) {

      try {
   	p = Runtime.getRuntime().exec(Args);

       }catch (IOException ioe) {}
}else if(obj == menuSerParar){
	p.destroy();
}

Bom, mas eu me atrapalhei um pouco pq esse executável deve ser iniciado via Shell, então eu estava tentando fazer assim:

String[] Args = {"cmd.exe","imagectn.exe","-c","C:\OffisServidor\configrc"};

E dessa forma, ele apenas iniciava outra shell ... e não iniciava a aplicação em si... agora deu boa... mas agora outra dúvida persiste...

como esse Executável necessita de passagem de parâmetros e na shell é feito dessa forma:
imagectn -c C:\OffisServidor\configrc
então eu tentei fazer desta forma:
String[] Args = {"imagectn.exe","-c","C:\OffisServidor\configrc"};

A dúvida é se desta forma como está, o método Runtime.getRuntime().exec() irá interpretar os outros itens do Array Args como parâmetros da aplicação imagectn da mesma forma q eu estivesse executando ela pela Shell???

Eu não sei se consegui ser claro...mas se tiverem idéia sobre como a função . Runtime.getRuntime().exec() trata os outros itens do Array Args...

Mas queria agradecer mesmo pela ajuda ai...blz... valeu mesmo... tiraram uma preocupação bem grande da minha cabeça heauhea Valeu

um abraço... olavo

putz. olha o tamanho do post

O

Daeee povo… outra dúvida nesse assunto. Agora eu preciso capturar a saida q esse processo gera e jogar para um arquivo. A linha q executa do comando é o seguinte:

Process procFind;
procFind = Runtime.getRuntime().exec("findscu.exe "+" -P "+" -aet "+" CLIENT "+" -aec "+" TCC_STORE "+" olavo "+" 104 "+" C://DICOM_OFFIS//query.dcm");

Beleza, notem q estou passando parâmetros e tal para a aplicação findscu. Se fizesse diretamente na shell, todos os dados de retorno seriam mostrado na tela, correto. Então se no final da linha de comando, depois dos parâmetros eu utilizar " > " posso jogar essa saida para um arquivo e tal. Mas, se eu utilizar essa tag como parâmetro na linha acima, ele não executa a aplicação.

Então é provavel q eu tenha q capturar a saida e depois criar um arquivo e jogar dentro dele ok. Bom ai q está o problema, estou com dificuldades de trabalhar com os metodos OutputStream e tal.

Então se pudessem me ajudar com algum exemplo… tenho q capturar a saida do Processo e gravar em um arquivo texto…

Valeu gente pela força.

Olavo

Criado 21 de outubro de 2004
Ultima resposta 9 de nov. de 2004
Respostas 9
Participantes 4