Desenvolvi esse código para propósitos pessoais:
public Boolean procurarProcessoLolRunning() throws IOException {
long start_time = System.currentTimeMillis();
long wait_time = 10000;
long end_time = start_time + wait_time;
boolean processoConfirmado = false;
while (System.currentTimeMillis() < end_time && processoConfirmado == false) {
try {
String comando = System.getenv("windir")
+ "\\system32\\tasklist.exe /nh /fi \"Imagename eq LeagueClientUxRender.exe\" /fi \"memusage gt 400000\"";
Process p = Runtime.getRuntime().exec(comando);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String process;
ArrayList<String> procs = new ArrayList<String>();
while ((process = input.readLine()) != null) {
procs.add(process);
Boolean processFound = procs.stream().filter(row -> row.indexOf("LeagueClientUxRender.exe") > -1).count() > 0;
if (processFound == true) {
processoConfirmado = true;
//break;
}
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
}
return processoConfirmado;
}
E gostaria de criar uma variante a partir deste mesmo, porém n sei muito bem como fazer. Neste código que apresentei, ele é responsável p retornar true caso o processo LeagueClientUxRender.exe estiver rodando acima de 400M de memória. Porém eu pretendo criar um novo método que seria capaz de interpretar a memória que o processo está utilizando e salvar isso como uma int. Acredito q possa estar relacionado com .read(charAt[]) mas n tenho certeza. No momento quando mando o console printar o "process" a saída é:
"LeagueClientUxRender.exe 11604 Console 1 256.348 K"