2015-08-09 2 views
-2

Я пытался получить% загрузку процессора с C. Я видел это решение: How to get the CPU Usage in C?процессора в C

Поэтому я попытался с помогает при условии:

#include <time.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/times.h> 
#include <unistd.h> 
#define NANO2SEC 1000000000 

struct timespec gettimenow; 
double getWtime; 
double getCtick; 
int ncore; 
double cpu_util; 

double get_wall_time() { 
    if (clock_gettime(CLOCK_REALTIME,&gettimenow)){ 
     //error handle 
     return 0; 
    } 
    return ((double)gettimenow.tv_sec + ((double)gettimenow.tv_nsec/NANO2SEC)); 
} 


double get_cpu_time() { 
    return ((double)clock()/sysconf (_SC_CLK_TCK)); 
} 

int core_logical() { 
    return (sysconf(_SC_NPROCESSORS_ONLN)); 
} 

void main() { 
    getWtime = get_wall_time(); 
    printf("\nWall time : %f \n", getWtime); 

    getCtick = get_cpu_time(); 
    printf("\nCPU time : %f \n", getCtick); 

    ncore = core_logical(); 
    printf("\nNo of cores : %d \n", ncore); 

    cpu_util = (getCtick/ncore/getWtime); 
    printf("\nCPU Utilization : %f %% \n", cpu_util); 
} 

о/р время

Стена: 1439132892,054816

процессорное время: 17,280000

Нет ядер: 2

Использование ЦП: 0,000000%

Но с высшим командным я обнаружил, что использование процессора не совсем 0%, то есть более, что это. то есть. 6.2% Я хочу знать% от используемого процессора в настоящее время.

+0

@ Anton.P такой же результат – Zim

+0

Для чего вы хотите использовать cpu? Система? Процесс? –

+0

@thatotherguy total cpu использование системы в% – Zim

ответ

2

Что делает ваша программа, не имеет никакого смысла.

Вы делите clock(), который возвращает количество процессорного времени, используемого текущим процессом, на количество секунд с 1970 года. Конечно, это не дает вам значимого ответа!

Если вы хотите получить текущее использование ЦП в системе, вам необходимо использовать данные, предоставленные /proc/uptime. При чтении этот файл возвращает два числа, представляющие количество секунд, в течение которых система была запущена, и количество секунд, в течение которых он простаивал. Итак, чтобы найти текущее использование ЦП:

  1. Откройте и прочитайте файл и сохраните два числа, которое вы получаете. Назовем их uptime1 и idle1. Закрой его.

  2. Подождите одну секунду.

  3. Открыть и прочитать файл еще раз; сохраните цифры как uptime2 и idle2.

  4. Использование ЦП в течение этой секунды составляло 100 - 100 * (idle2 - idle1)/(uptime2 - uptime1) процентов.

+0

, что время простоя proc - это уже предоставленное системой значение. Я хочу рассчитать с помощью c. не хочет выполнять системный вызов – Zim

+1

@ Zim 'top' вычисляет все свои номера на основе информации из'/proc'. –

+0

** Нет ничего постыдного в использовании '/proc'.**. Это как раз и часть интерфейса ядра, как любой системный вызов, и это единственное место, где доступна вся информация. – duskwuff

Смежные вопросы