Ir ao conteúdo
  • Cadastre-se

Verificar se um programa está em execução


Posts recomendados

Olá,

Sou novo no fórum e também em programação, gostaria de saber como faço para verificar se um programa já esta em execução e se ele está respondendo.

Por exemplo, se a calculadora esta aberta no computador, ou se o internet explorer está aberto e a pagina respondendo.

Eu utilizo o Eclipse.

Motivo: eu criei um "robô" simulando um teclado e mouse para coletar informações de um programa aqui da empresa (de forma legal, apenas para agilizar), porém, as vezes o programa que eu faço a consulta trava (fica lento as vezes pela internet estar lenta), eu utilizo  o robot.delay para criar um tempo de espera, mas eu gostaria de agilizar o processo fazendo uma verificação se  o programa está respondendo.

att

João

Link para o comentário
Compartilhar em outros sites

Boa tarde.

 

Para fazer esse tipo de coisa em Java, você consegue verificar se o programa está sendo executado mas não existe nada que você possa fazer em Java para descobrir se ele está respondendo. Se o seu robô consegue interagir com o  programa para capturar dados, você pode fazer um método em que o robô execute uma operação específica  e que ele receba sempre uma resposta padrão para o teste. Se receber, o programa está respondendo. Se não receber depois de X tempo, o programa travou.

 

Para verificar se um programa está rodando, podemos usar o wmic do Windows e especificar o nome do .exe que você quer verificar.

 

private void verificaProcesso() {
        String line;
        int instances = 0;
        try {
            Process processo = Runtime.getRuntime().exec("wmic.exe");
            try (BufferedReader br = new BufferedReader(new InputStreamReader(processo.getInputStream()))) {
                OutputStreamWriter osw = new OutputStreamWriter(processo.getOutputStream());
                osw.write("process where name='chrome.exe'");
                osw.flush();
                osw.close();
                while ((line = br.readLine()) != null) {
                    if (line.contains("chrome.exe")) {
                        instances++;
                    }
                }
                System.out.println("Existem " + instances + " processos chrome.exe rodando");
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

Nesse caso, atribuímos um processo com o Runtime.getRuntime().exe(), buscando o programa wmic.exe do Windows.

 

Depois, escrevemos nossa "pesquisa" no processo usando o OutputStreamWriter onde buscamos por "process where name = 'chrome.exe'". Nesse caso, eu busquei pelo programa chrome.exe.

 

Se existir alguma linha de processo que contenha chrome.exe, instances será incrementado em 1 toda vez que ele for encontrado.

 

Depois, eu imprimi no console quantas vezes esse processo apareceu. No seu caso, verifique se instances for igual a 1 (creio que só deva existir uma instância desse programa funcionando, certo?), você executa a verificação do robô para ver se o programa está respondendo.

 

Mais específico que isso, apenas com programação em C/C# e JNI.

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

TwistedSoul,  desculpe fazer esta consulta depois de tanto tempo, mas só agora precisei do recurso.  O problema é que se eu tiver mais de um aplicativo java instalado na máquina, não tem como eu saber se um específico já está em execução. Isso porque, independentemente do comando que eu tenha executado, o processo será indistintamente um "java.jar" . Então eu precisaria contar os nomes de aplicativos ("java -jar nome_app") que dispararam cada um dos  "java.jar" em execução. Tem como fazer isto?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...