получить загрузку процессора для процесса по PID (верхний исходный код) - PullRequest
5 голосов
/ 22 февраля 2011

Как я могу получить использование процессора для процесса, если я знаю только PID? MAXOS X

Я просмотрел исходные коды лучших утилит для MACOSX и Я нашел несколько важных функций в libtop.c

/* Iterate through all processes and update their statistics. */
libtop_p_proc_table_read(boolean_t reg)

libtop_p_task_update() 

/* Get CPU usage statistics.    */
libtop_pinfo_update_cpu_usage() 

Проблема в том, что я не понимаю, как они получают% загрузки ЦП от этого огромного количества Специфичные для MACOS системные вызовы "mach kernel" У кого-нибудь есть решение для этого?

В качестве источника они получают system_time, user_time, total_time.
I total_time это время от запуска процесса или как? Или может быть total_time равен 1 сек.

Например, мои результаты: для браузера Opera:

pid: 1214, пользователь: 653,517582сек, система: 193,597306сек, всего: 847,118888сек

Правильная информация из верхней утилиты:

КОМАНДА ПИДА% ВРЕМЯ ЦП
1214 - Опера 8,0 14: 04,52

Я не понимаю, как конвертировать мои результаты в 8,0%. Общее время здесь представляет собой сумму времени пользователя и системного времени. Общее время правильное: 847сек составляет около 14мин 04 сек Чтобы получить процент использования процессора, мне нужно что-то вроде простоя для всего процесса.

Я уже провел целый день, но без какого-либо аванса.

Ответы [ 4 ]

3 голосов
/ 17 мая 2011

Посмотрите на GetCPUUsage () в https://chromium.googlesource.com/chromium/src/+/master/base/process/process_metrics_mac.cc, чтобы узнать, как это реализовано в диспетчере задач chrome.

2 голосов
/ 03 апреля 2011

Время, которое вы получаете от функции тезисов, - это время, когда этот процесс использовал процессор.

Следует учитывать, что процессор может использоваться только одним процессом одновременно (игнорируйте многоядерный процессор).

Таким образом, чтобы получить значение в процентах, вы должны спросить в первый раз, затем подождать и, наконец, спросить во второй раз.

и% CPU = (TIME2 - TIME1) / Waited_time;

если вы ждете ровно секунду, у вас уже есть хороший% CPU

Если у вас более одного процессора, вам может понадобиться разделить число процессоров на ядро ​​

0 голосов
/ 03 апреля 2016

Как я могу получить использование процессора для процесса, если я знаю только PID? MAXOS X

В этом случае я старался не ограничиваться PID. Но если вы знаете PID, это еще проще.

ps -aeo pcpu,pid,user,args|tail -n +2|sort -r|head -n 1

Выход:

2,8 207 пользователь1 / Приложения / Google Chrome.app/Contents/MacOS/Google Chrome -psn_0_20485

Чтобы использовать его из Java-программы, вот что вы можете попробовать:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TopProcess {

    public static void main(String[] args) throws IOException {
        final String[] cmd = { "/bin/sh", "-c", "ps -aeo pcpu,pid,user,args|tail -n +2|sort -r|head -n 1" };
        String process;
        BufferedReader input = null;
        try{
            Process p = Runtime.getRuntime().exec(cmd); 
            input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((process = input.readLine()) != null) {
                System.out.println(process);
            }
        }
        catch (Exception ex){
            ex.printStackTrace();
        }
        finally {
            input.close();
        }
    }
}
0 голосов
/ 03 апреля 2011

Посмотрите, как top.c осуществляет сортировку по загрузке процессора. total_time - p_total_time показывает время процессора, используемое процессом за последний интервал выборки. Разделите это на сумму этой разницы для каждого процесса, и вы получите свой процент.

Кстати, при использовании Mac OS X на вашем Mac для чтения документации Mac OS X и исходного кода Mac OS X вы, возможно, заметили, что они последовательно пишут его как «Mac» и «Mac OS X». Возможно, вы подумали, что они просто неправильно написали название своей ОС пару миллионов раз, но на самом деле, как ни странно, «Mac OS» - это правильное написание, а не «MACOS». Mac не аббревиатура.

...