diff --git a/general/src/function/cpu_usage.cpp b/general/src/function/cpu_usage.cpp index 3125597..01351c5 100644 --- a/general/src/function/cpu_usage.cpp +++ b/general/src/function/cpu_usage.cpp @@ -1,6 +1,96 @@ #include "cpu_usage.h" #include +#ifdef linux + +using namespace std; +#define _LINE_LENGTH 300 + + +bool GetCpuMem(float &cpu,size_t &mem, int pid,int tid = -1) +{ + bool ret = false; + char cmdline[100]; + sprintf(cmdline, "ps -o %%cpu,rss,%%mem,pid,tid -mp %d", pid); + FILE *file; + file = popen(cmdline, "r"); + if (file == NULL) + { + printf("file == NULL\n"); + return false; + } + + char line[_LINE_LENGTH]; + float l_cpuPrec=0; + int l_mem=0; + float l_memPrec=0; + int l_pid=0; + int l_tid=0; + if (fgets(line, _LINE_LENGTH, file) != NULL) + { + // printf("1st line:%s",line); + if (fgets(line, _LINE_LENGTH, file) != NULL) + { + // printf("2nd line:%s",line); + sscanf( line, "%f %d %f %d -", &l_cpuPrec, &l_mem, &l_memPrec, &l_pid ); + cpu = l_cpuPrec; + mem = l_mem/1024; + if( tid == -1 ) + ret = true; + else + { + while( fgets(line, _LINE_LENGTH, file) != NULL ) + { + sscanf( line, "%f - - - %d", &l_cpuPrec, &l_tid ); + // printf("other line:%s",line); + // cout<