>Можно посмотреть как это сделано в докапах wmcpuload и wmmemload. Выдернул я из доков по ядру пример сишного кода, как смотреть загрузку проца, прицепил туда и описанный выше пример с структурой sysinfo и добавил вывод. Вот что получилось:
/*
компиляция gcc -o sinfo source.c
*/
#include <time.h>
#include <limits.h>
#include <signal.h>
#include <sys/time.h>
#include <stdio.h>
#include <sys/sysinfo.h>
#define HIST 10
struct sysinfo getmeminfo ()
{
struct sysinfo si;
sysinfo(&si);
return si;
}
static volatile sig_atomic_t stop;
static void sighandler (int signr)
{
(void) signr;
stop = 1;
}
static unsigned long hog (unsigned long niters)
{
stop = 0;
while (!stop && --niters);
return niters;
}
int main (void)
{
int i;
struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },
.it_value = { .tv_sec = 0, .tv_usec = 1 } };
struct sysinfo sf;
sigset_t set;
unsigned long v[HIST];
unsigned long res;
double tmp = 0.0;
unsigned long n;
signal (SIGALRM, &sighandler);
setitimer (ITIMER_REAL, &it, NULL);
unsigned long tm,fm; //total mem and free mem info
hog (ULONG_MAX);
for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);
for (i = 0; i < HIST; ++i) tmp += v[i];
tmp /= HIST;
n = tmp - (tmp / 3.0);
sigemptyset (&set);
sigaddset (&set, SIGALRM);
for (;;) {
res=hog(n);
if (res) {
printf("%ld\n",res);
}
sigwait (&set, &i);
if (res) {
sf = getmeminfo();
printf("total mem: %ld\nfree mem: %ld\n",sf.totalram,sf.freeram);
}
}
return 0;
}
в итоге получаю следующие результаты: информацию о памяти выводит корректно, а вот с что творится с загрузкой процессора, ума не приложу. Происходит это след. образом: вывод неких циферок, информирующих непонятно каким образом о загрузке камня, происходит по не менее непонятным событиям. Я запускаю locate -u (к примеру) вывод происходит не чаще, чем если я просто ничего не делаю. Может кто пояснит мне что можно с этим сделать и как довести до ума, чтоб видеть процент загрузки или свободных ресурсов процессора?