bahamat,
você pode querer procurar o arquivo / proc / stat (em todo o sistema) ou o arquivo / proc / PID-ID / stat (por processo [guest-]).
Este poderia ser um código de exemplo para procurar por todos os ciclos de cpu. você também pode se despir para os ciclos de convidados.
/* stat CPU of local system */
uint16_t system_cpu_percent_busyness(void) {
long jiff_user_a, jiff_nice_a, jiff_system_a, jiff_idle_a, jiff_io_wait_a, jiff_irq_a, jiff_softirq_a, jiff_stolen_a, jiff_guest_a;
long jiff_user_b, jiff_nice_b, jiff_system_b, jiff_idle_b, jiff_io_wait_b, jiff_irq_b, jiff_softirq_b, jiff_stolen_b, jiff_guest_b;
long jiff_used_a, jiff_used_b, jiff_total_a, jiff_total_b;
char cpu[10];
FILE *pf;
if((pf = fopen("/proc/stat", "r")) == NULL) {
return(0);
}
fscanf(pf, "%s\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld", cpu, &jiff_user_a, &jiff_nice_a, &jiff_system_a, &jiff_idle_a, &jiff_io_wait_a, &jiff_irq_a, &jiff_softirq_a, &jiff_stolen_a, &jiff_guest_a);
fclose(pf);
usleep(100000); // sleep 0.1 sec
if((pf = fopen("/proc/stat", "r")) == NULL) {
return(0);
}
fscanf(pf, "%s\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld\t%ld", cpu, &jiff_user_b, &jiff_nice_b, &jiff_system_b, &jiff_idle_b, &jiff_io_wait_b, &jiff_irq_b, &jiff_softirq_b, &jiff_stolen_b, &jiff_guest_b);
fclose(pf);
jiff_used_a = jiff_user_a + jiff_nice_a + jiff_system_a + jiff_io_wait_a + jiff_irq_a + jiff_softirq_a + jiff_stolen_a + jiff_guest_a;
jiff_total_a = jiff_used_a + jiff_idle_a;
jiff_used_b = jiff_user_b + jiff_nice_b + jiff_system_b + jiff_io_wait_b + jiff_irq_b + jiff_softirq_b + jiff_stolen_b + jiff_guest_b;
jiff_total_b = jiff_used_b + jiff_idle_b;
return((uint16_t)((100 * (jiff_used_b - jiff_used_a) / (jiff_total_b - jiff_total_a))));
}
Adicionais dê uma olhada na função getrusage () do seu sistema.