Как получить детали процесса ОС для конкретного приложения, используя API SIGAR или OSHI в Java? - PullRequest
1 голос
/ 28 сентября 2019

Предоставляет ли SIGAR, OSHI или любые другие подобные API готовые и, что наиболее важно, общие возможности для извлечения информации о процессе ОС?

Мое требование - получить PID и некоторые другие детали всех процессов ОС конкретной программы, например, Chrome.

Как показано ниже, я написал свою собственную реализацию, но мне придется прийтинемного другой метод для Unix, Mac, Solaris и т. д., как показано ниже, относится к Windows.Просто для того, чтобы все было обобщенно, мне интересно, есть ли какой-нибудь метод OOTB в SGIAR / OSHI.

public static List<String> getNodeDetailsFromWinOs(){
        List<String> nodeList = new ArrayList<String>();
        String process;
        Process p = Runtime.getRuntime().exec("tasklist.exe /nh");
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((process = input.readLine()) != null) 
                        {
                          nodeList.add(process.substring(10, process.indexOf(".")));
                        }
        input.close();
        return nodeList;    
    }

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019
Класс

OSHI OSProcess предоставляет эту возможность "из коробки" для Windows, macOS, Linux, Solaris и FreeBSD.

SystemInfo si = new SystemInfo();
OperatingSystem os = si.getOperatingSystem();
OSProcess[] procs = os.getProcesses(0, ProcessSort.CPU);

for (OSProcess p : procs) {
    if (p.getName().contains("Chrome") {
        // do stuff with p
    }
}
1 голос
/ 28 сентября 2019

Я не смог найти его раньше, потому что документы SIGAR не были доступны публично.Я нашел их здесь по этой ссылке.Он содержит документ и API Ref.

Кстати, метод public long[] find(java.lang.String query) throws SigarException в классе ProcessFinder может быть использован для получения сведений об ОС.

SIGAR API ref можно загрузить с https://sourceforge.net/projects/sigar/

...