Привет!
Мне очень нужно получить в своей программе загрузку процессора и памяти...
Может кто-то уже имеет подобный код? (С++)
Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...Спасибо большое...
Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)man getrusage()
>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...
cat /proc/self/status
cat /proc/<id_process>/status
ps aux | grep <name_process>
time <name_program>
top -n1 | grep <name_program>>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>
>[оверквотинг удален]
>cat /proc/<id_process>/status
>ps aux | grep <name_process>
>time <name_program>
>top -n1 | grep <name_program>
>
>>
>>
>>Спасибо большое...
>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>Мне нужна не отдельного процесса, а загрузка вцелом...
в процентах (желательно)
>[оверквотинг удален]
>>top -n1 | grep <name_program>
>>
>>>
>>>
>>>Спасибо большое...
>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>
>
>Мне нужна не отдельного процесса, а загрузка вцелом...
>в процентах (желательно)top -n1 | head -4 | tail -2
?
>[оверквотинг удален]
>>>>
>>>>Спасибо большое...
>>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>>
>>
>>Мне нужна не отдельного процесса, а загрузка вцелом...
>>в процентах (желательно)
>
>top -n1 | head -4 | tail -2
>?Спасибо!
То что надо
>[оверквотинг удален]
>>>>
>>>>Спасибо большое...
>>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>>
>>
>>Мне нужна не отдельного процесса, а загрузка вцелом...
>>в процентах (желательно)
>
>top -n1 | head -4 | tail -2
>?top -n1 | head -3 | tail -1
выдает мне вот это
Cpu(s): 4.4%us, 0.3%sy, 0.0%ni, 94.9%id, 0.3%wa, 0.1%hi, 0.0%si, 0.0%stИ выдает мне это постоянно... как бы я не грузил свой процессор...
Может это всетаки что-то не то?
Мне нужна общая загрузка...
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)
>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...
>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>посмотрите сурс mpstat
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)
>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...
>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>Сталкивался с такой задачкой. Даю 2 функции.
/* функция возвращает загрузку процессора в процентах независимо от кол-ва ядер (у меня 2 ядра, функция работает корректно)*/
//int getcpuusage(cpu_options *opts)
int getcpuusage()
{
static int *pid_list;
static int pids;
static int pre_used, pre_total;
static int pre_ig_used;
int usage;
int cpu, nice, system, idle;
int used = 0, total = 0;
int ig_used = 0;
int i;
cpu_options *opts;
opts->ignore_nice = false;
opts->cpu_number = -1;
opts->ignore_procs = 0;FILE *fp;
if (!(fp = fopen("/proc/stat", "r"))) {
perror("can't open /proc/stat");
exit(1);
}fscanf(fp, "%*s %d %d %d %d", &cpu, &nice, &system, &idle);
#ifdef USE_SMP
if (opts->cpu_number >= 0) {
char cpu_name[20];
if (opts->cpu_number > NR_CPUS - 1) {
fprintf (stderr, "MAX CPU number that can be running in SMP is %d\n", NR_CPUS - 1);
exit(1);
}
for (i = 0; i <= opts->cpu_number; i++) {
fscanf(fp, "%s %d %d %d %d", cpu_name, &cpu, &nice, &system, &idle);
if (strncmp(cpu_name, "cpu", 3)){
fprintf (stderr, "can't find cpu%d!\n", opts->cpu_number);
exit (1);
}
}
}
#endif /* USE_SMP */fclose(fp);
used = cpu + system;
if (!opts->ignore_nice)
used += nice;
total = cpu + nice + system + idle;/* calc CPU usage */
if ((pre_total == 0) || !(total - pre_total > 0)) {
usage = 0;
} else if (ig_used - pre_ig_used > 0) {
usage = (100 * (double)(used - pre_used - ig_used + pre_ig_used)) /
(double)(total - pre_total);
} else {
usage = (100 * (double)(used - pre_used)) / (double)(total - pre_total);
}/* save current values for next calculation */
pre_ig_used = ig_used;
pre_used = used;
pre_total = total;return usage;
}/*функция возвращает иформацию о доступной и занятой памяти. */
struct sysinfo getmeminfo ()
/*
функция возвращает структуру с описнием ресурсов памяти
struct sysinfo {
long uptime; Seconds since boot
unsigned long loads[3]; 1, 5, and 15 minute load averages
unsigned long totalram; Total usable main memory size
unsigned long freeram; Available memory size
unsigned long sharedram; Amount of shared memory
unsigned long bufferram; Memory used by buffers
unsigned long totalswap; Total swap space size
unsigned long freeswap; swap space still available
unsigned short procs; Number of current processes
unsigned long totalhigh; Total high memory size
unsigned long freehigh; Available high memory size
unsigned int mem_unit; Memory unit size in bytes
char _f[20-2*sizeof(long)-sizeof(int)]; Padding: libc5 uses this..
};
*/
{
struct sysinfo si;
sysinfo(&si);
return si;
}
---------------------------------------------------
Что касаемо памяти, тут есть одна проблемка. Linux старается потребить всю свободную память под различные буфера устройств итп. Так что то, что тебе возвратится в структуре в поле freeram не совсем правда. Для того что бы получить реальное кол-во свободной памяти, сделай следующее: freeram - bufferram.