Получить статистику использования CPU из программы C

Я хочу прочитать статистику использования CPU из программы C, меня интересует процент использования процессора, время кражи и т. Д. Эти статистические данные отображаются в третьей строке из top команды.

Я попытался проанализировать вывод top с awk ( top -n 1 -b | awk '{print $0}' ), но кажется, что top дает всегда одни и те же «вымышленные» значения, прежде чем он начнет показывать правильную статистику.

Есть ли способ из кода или путем разбора вывода некоторой команды для получения статистики использования ЦП?

Редактировать:

Платформа – Linux

Спасибо.

2 Solutions collect form web for “Получить статистику использования CPU из программы C”

Вы хотите прочитать первые несколько строк /proc/stat . Вам нужно будет прочитать его дважды, измеренное время в отдельности и вычесть первый набор чисел из второго. Строки выглядят так:

 cpu 1526724 408013 600675 541100340 2861417 528 14531 0 0 0 cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0 cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0 cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0 cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0 intr 2111239193 344878476 16943 ... 

Первая строка является совокупной для всех ядер. Следующие строки показывают каждое ядро. Когда вы видите строку, начинающуюся с intr , вы знаете, чтобы остановить синтаксический анализ.

Каждый номер – это количество времени, затраченного ЦП в конкретном состоянии. Единицы обычно составляют сотые доли секунды. Поля – это user , nice , system , idle , iowait , softirq , softirq , steal , guest и guest_nice .

Авторитарная документация – это, конечно, исходный код. Если у вас есть копия исходного кода ядра Linux, посмотрите на fs/proc/stat.c , в частности на функцию show_stat .

В Интернете есть пример , показывающий, как читать /proc/pid/stat в C.

Вы можете прочитать значения utime или stime в два разных момента и вычислить требуемую статистику использования процессора. (Я думаю, что top использует эти необработанные данные.)

(Я забыл: это специфический для Linux).

  • Могу ли я увидеть имя пользователя пальца в htop?
  • Как работает FireFox на виртуальной машине, которая не имеет отображения?
  • Что это значит, когда процессы «Время» остановились сверху?
  • Надежное определение свободной памяти
  • Как я могу определить, какой процесс связан с IO?
  • Если я хочу создать графический интерфейс, который отображает точно те же данные, что и команда TOP в LINUX, откуда я получу данные?
  • Извлечение информации о процессе
  • Список 10 основных процессов процессора
  • Верхний вид леса с фильтром, могу ли я включить всех детей?
  • Получить нагрузку на процессор ядра в сценарии оболочки
  • Мониторинг iowait в верхней части OSX / iMac
  • Неоправданно длительное время процесса отображается сверху
  • Linux и Unix - лучшая ОС в мире.