Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

multiplos parametros tasklist Java

Pretendo fazer uma implementação utilizando multiplos parametros do tasklist para encontrar um processo de nome especifico a partir do momento em que o uso de memoria dele ultrapasse determinado valor. Até ai tudo bem, no cmd seria simplesmente assim:

tasklist.exe /fi "imagename eq javaw.exe" /fi "memusage gt 10000"

Porém, ao tentar realizar a mesma ação no Java, eu n consigo inserir o segundo parâmetro "/fi":

System.getenv("windir") +"\\system32\\"+"tasklist.exe /fi \"Imagename eq javaw.exe"+"/fi \"memusage ne 1000\"");

O código completo seria o seguinte:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class ProcessRuning {
    public static void main(String[] args) {
        try {
            String process;
            Process p = Runtime.getRuntime().exec(
                    System.getenv("windir") +"\\system32\\"+"tasklist.exe /fi \"Imagename eq javaw.exe"+"/fi \"memusage ne 1000\"");
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((process = input.readLine()) != null) {
                System.out.println(process);
            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }
    }
}
2 respostas
solução!

Isso acontece provavelmente porque você esqueceu de fechar as aspas do primeiro parâmetro:

# faltou um \"  :
eq javaw.exe"+"/fi \"memusage
eq javaw.exe\""+"/fi \"memusage

Outra coisa: você concatenar as strings assim fez com que esquecesse alguns espaços. Faça numa string só pra não ficar tão confuso.

String comando = System.getenv("windir")+
    "\\system32\\tasklist.exe /fi \"Imagename eq javaw.exe\" /fi \"memusage ne 1000\"";

Era exatamente isso, Marco. Muito obrigado pela atenção.