Esta é outra abordagem para analisar a lista de processos a partir do comando " ps -e ":
try {
String line;
Process p = Runtime.getRuntime().exec("ps -e");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
Se você estiver usando o Windows, deve alterar a linha: "Process p = Runtime.getRun ..." etc ... (3ª linha), por uma que se pareça com isto:
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
Espero que as informações ajudem!
tasklist.exe /fo csv /nh
para obter a lista no formato CSV, que é muito mais fácil de analisar.ps -elf | grep java
, não retornará nada, masps -elf
funcionará conforme o esperado.(.exec (Runtime/getRuntime) "tasklist"))
(em Clojure, usando Java-interop) retorna corretamente otasklist
processo, mesmo sem especificar um diretório.Finalmente, com Java 9+ é possível com
ProcessHandle
:Resultado:
fonte
java.lang
tão nenhuma importação necessáriaNo Windows, há uma alternativa para usar JNA :
fonte
GetModuleFileName
. Consulte stackoverflow.com/questions/7521693/… para obter um exemplo.WMIC PROCESS
ou para restringir a saída para um processo específico:WMIC PROCESS WHERE name='theName'
. Você pode usar outros filtros para limitar a saída, se necessário. A linha de comando está incluída na coluna CommandLine da tabela retornada (= 2ª coluna)A única maneira que consigo pensar em fazer isso é invocando um aplicativo de linha de comando que faz o trabalho para você e, em seguida, capturando a tela da saída (como o ps do Linux e a lista de tarefas do Windows).
Infelizmente, isso significa que você terá que escrever algumas rotinas de análise para ler os dados de ambos.
fonte
tasklist
programa pode ser configurado para produzir CSV :)YAJSW (Yet Another Java Service Wrapper) parece ter implementações baseadas em JNA de sua interface org.rzo.yajsw.os.TaskList para win32, linux, bsd e solaris e está sob uma licença LGPL. Não tentei chamar este código diretamente, mas YAJSW funciona muito bem quando eu o usei no passado, então você não deve se preocupar muito.
fonte
Você pode facilmente recuperar a lista de processos em execução usando jProcesses
fonte
Não existe uma maneira neutra de plataforma de fazer isso. Na versão 1.6 do Java, uma classe " Desktop " foi adicionada para permitir maneiras portáteis de navegar, editar, enviar, abrir e imprimir URIs. É possível que algum dia essa classe seja estendida para apoiar processos, mas eu duvido.
Se você estiver apenas curioso em processos Java, pode usar a api java.lang.management para obter informações de thread / memória na JVM.
fonte
Para windows eu uso o seguinte:
fonte
Isso pode ser útil para aplicativos com um JRE incluído: eu procuro o nome da pasta da qual estou executando o aplicativo: portanto, se o seu aplicativo estiver sendo executado:
então você pode descobrir se ele já está em execução no J9:
fonte
Usar código para analisar
ps aux
para Linux etasklist
Windows são suas melhores opções, até que algo mais geral apareça.Para Windows, você pode consultar: http://www.rgagnon.com/javadetails/java-0593.html
Linux pode canalizar os resultados do
ps aux
meiogrep
também, o que tornaria o processamento / busca rápida e fácil. Tenho certeza que você pode encontrar algo semelhante para o Windows também.fonte
O programa abaixo será compatível apenas com a versão Java 9+ ...
Para obter as informações do CurrentProcess,
Para todos os processos em execução,
fonte
Temos que usar,
process.getOutputStream.close()
caso contrário, ele ficará travado no loop while.fonte
fonte
Este é meu código para uma função que obtém as tarefas e seus nomes, adicionando-as também a uma lista para ser acessada de uma lista. Ele cria arquivos temporários com os dados, lê os arquivos e obtém o nome da tarefa com o sufixo .exe e organiza os arquivos a serem excluídos quando o programa sai com System.exit (0), também oculta os processos que estão sendo usados para obtenha as tarefas e também o java.exe para que o usuário não elimine acidentalmente o processo que executa o programa.
fonte