[RESOLVIDO]Como verificar processos em execução e mata-los em Java?
11 respostas
S
seleghini
Pessoal,
É o seguinte, necessito criar uma rotina em Java onde verifique os processos e subprocessos que estão rodando em uma máquina windows e se esses processos demorarem mais que um determinando tempo (ex. : 30 minutos) eu possa mata-los.
Mas acredito que deveria rodar algum “robo” que ficasse vendo esses processos se estão em execução, po favor gostaria de um luz para desenvolver essa rotina.
Você precisa de alguns programas, como o pskill e o pslist, que podem ser obtidos em
Uma vez feito isso, redirecione a saída do pslist para obter a lista de processos, e use o pskill para matá-los.
S
seleghini
certo, mas teria uma outra alternativa sem usar programas externos ? pq estava vendo esses programas devem rodar com privilégio de administrador, e não sei se a minha aplicação terá esses privilégios no servidor onde ele fará essa pesquisa
Obrigado
E
entanglement
Sim, mas você precisa desses privilégios de qualquer maneira, para poder listar processos ou matá-los.
S
seleghini
correto, mas acho que vc não precisa ser administrador para poder dar um tasklist ou taskkill não é ?
Obrigado
E
entanglement
Se os processos forem seus, você não precisa privilégios para usar pslist, tasklist, taskkill ou pskill. Se os processos não forem, taskkill e pskill requerem privilégios adequados.
S
seleghini
me confundi pois estava fazendo alguns testes aqui mas o serviço não era meu mesmo, desculpa a confusão. rsrsrs
Obrigado
A
Andre_Rosa
seleghini:
certo, mas teria uma outra alternativa sem usar programas externos ? pq estava vendo esses programas devem rodar com privilégio de administrador, e não sei se a minha aplicação terá esses privilégios no servidor onde ele fará essa pesquisa
Obrigado
Você pode criar uma biblioteca dinâmica (DLL) em C, e usar suas funções em Java. Caso for fazer isso, procure pela documentação da API do Windows. Você pode, por exemplo, dar uma olhada na função TerminateThread():
Também há a função EnumProcesses(), para listar os processos:
E
entanglement
Eu em particular já usei tais métodos em programas C/C++. Não são muito triviais de usar, e como há um “callback” no caso de EnumProcesses, é necessário escrever mais código C/C++ que o desejável em um programa Java.
Sinceramente eu prefiro chamar um executável separado (basta redirecionar a saída para um arquivo, e ler esse arquivo ) , a menos que eu veja que isso está consumindo CPU demais, o que normalmente não é o caso.
J
juliocbq
entanglement:
Eu em particular já usei tais métodos em programas C/C++. Não são muito triviais de usar, e como há um “callback” no caso de EnumProcesses, é necessário escrever mais código C/C++ que o desejável em um programa Java.
Sinceramente eu prefiro chamar um executável separado (basta redirecionar a saída para um arquivo, e ler esse arquivo ) , a menos que eu veja que isso está consumindo CPU demais, o que normalmente não é o caso.
O problema é que a cada chamada do sistema(carregar os softwares externos) vai dar um pico na cpu. É uma alternativa simples mas não é a ideal. Sinceramente eu prefiro escrever isso em pascal ou c++.
S
seleghini
valeu entanglement
eu resolvi utilizando os programas pslist e pskill mesmo criei um classe de schedule e a cada intervalo de tempo ele executa esses comandos para verificar e matar os processo.
obrigadão
J
juliocbq
Em c++ isso poderia ter sido feito simplesmente usando o framework qt. Criar esse tipo de solução em java é escrever mais e gastar mais tempo.