Получить статистику использования 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).

  • Добавить временные метки для вывода команды «top»
  • Как мне получить команду «top» для ее вывода?
  • Как я могу перенаправить вывод в файл, когда программа построена с помощью библиотеки ncurses
  • Верхний «id» использует 50-99% CPU
  • Как мы можем использовать команду «top» для одновременного мониторинга общего использования ЦП и использования каждого процессора?
  • Разница между выводами top и ps
  • Запросы о верхней команде
  • В чем разница между командами ps и top?
  • Что означает% использования в htop, если только один процесс может выполняться одновременно?
  • htop не показывает процесс
  • Верхняя команда OSX показывает 5, работающих на четырехъядерном ядре
  • Interesting Posts

    Выполнение команд оболочки в файле .sh приводит к ошибке

    Как проверить, кто входит в действующий виртуальный терминал?

    Невозможно обновить новое ядро ​​для CentOS 7, хотя на сервере достаточно места

    Как загрузить файл с сервера CentOS на терминале через ssh-сервер

    x11 – не может перемещать курсор мыши с нуворишем, xev все еще сообщает движение

    Выполнить команду для каждой записи в файле

    vimdiff для сравнения вывода вместо файлов

    Исправление источника ядра через git

    Старая конфигурация X11 для vmware guest

    Машина сохраняет резервные копии файлов, которые я уже удалил

    Почему backspace не переходит на предыдущую страницу в firefox / xfce4?

    Эквивалент memmove на файлы: скопируйте диапазон байтов в более раннюю позицию

    Как подключить несколько папок uboot bootargs

    Получите оболочку для входа в систему как root `su -l` без изменения каталога

    Почему программа SGID не может читать файл из той же группы, если она используется другим пользователем?

    Linux и Unix - лучшая ОС в мире.