📄 performance.c
字号:
TotalDelta = TotalProcessCPUUsage - LastTotalProcessCPUUsage;
*percent = 100*(float)cpuload/(float)TotalDelta;
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get cpu load error");
return -1;
}
free(pProcInfo);
return 0;
}
int GetProcMemUsage(unsigned int pid, float *percent, char *errbuf)
{
LONG status;
void *pProcInfo = NULL;
struct process_info *pProcessInfo;
DWORD dwInfoSize = 0x80000;
MEMORYSTATUS MemStat;
DWORD phymem = 0, memtol;
PROCNTQSI NtQuerySystemInformation;
GlobalMemoryStatus(&MemStat); //dwTotalPhys
memtol = MemStat.dwTotalPhys;
pProcInfo = (void*)malloc(dwInfoSize);
if(!pProcInfo)
{
strcpy(errbuf, "2:malloc() error");
return -1;
}
NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetModuleHandle( "ntdll.dll" ),"NtQuerySystemInformation" );
if (!NtQuerySystemInformation)
{
strcpy(errbuf, "2:GetProcAddress() error");
free(pProcInfo);
return -1;
}
status = NtQuerySystemInformation(5,pProcInfo,dwInfoSize,0);
if (status!=NO_ERROR)
{
strcpy(errbuf, "2:NtQuerySystemInformation() error");
free(pProcInfo);
return -1;
}
pProcessInfo = (struct process_info *)pProcInfo;
while(1)
{
if(pid == pProcessInfo->dwProcessID)
{
phymem = pProcessInfo->dwWorkingSet;
}
if(pProcessInfo->dwOffset == 0)
{
break;
}
pProcessInfo = (struct process_info *)((byte*)pProcessInfo + pProcessInfo->dwOffset);
}
*percent = 100*(float)phymem/(float)memtol;
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get memory load error");
return -1;
}
free(pProcInfo);
return 0;
}
#else /** #ifdef WIN32 */
int GetSysCpuUsage(float *percent, char *errbuf)
{
char buffer[MIN_BUF_LEN];
unsigned long memsize = 0,memfree = 0;
int ret;
int i;
//memset(buffer, 0, COM_BUF_LEN);
//sprintf(buffer, "%s", "LANG=POSIX");
//putenv(buffer);
//fp=popen(SYSTEMSTATCMD,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
for (i = 0; i < 5; i++)
{
ret = my_system(SYSTEMSTATCMD, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
sscanf(buffer,"%d,%f",&memfree,percent);
if (memfree != 0)
{
break;
}
}
if (i >= 5)
{
strcpy(errbuf, "2:get cpu load error");
return -1;
}
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get cpu load error");
return -1;
}
return 0;
}
int GetSysMemUsage(float *percent, char *errbuf)
{
char buffer[MIN_BUF_LEN];
unsigned long memsize = 0,memfree = 0;
float ftmp;
int ret;
int i;
//memset(buffer, 0,sizeof(buffer));
//sprintf(buffer, "%s", "LANG=POSIX");
//putenv(buffer);
#if defined(SOLARIS) || defined(AIX)
memset(buffer,0,sizeof(buffer));
//fp=popen(SYSTEMSTATCMD,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
for (i = 0; i < 5; i++)
{
ret = my_system(SYSTEMSTATCMD, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
sscanf(buffer,"%d,%f",&memfree,&ftmp);
if (memfree != 0)
{
break;
}
}
if (i >= 5)
{
strcpy(errbuf, "2:get memory load error");
return -1;
}
//fp=popen(MEMSIZECMD,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
ret = my_system(MEMSIZECMD, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
memsize = strtoul(buffer,NULL,10);
#elif defined(LINUX)
//fp=popen(PHYSICAL_MEMORY_COMMAND,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
ret = my_system(PHYSICAL_MEMORY_COMMAND, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
sscanf(buffer,"%lu,%lu",&memsize,&memfree);
#endif
if (memsize == 0)
{
strcpy(errbuf, "2:get memory size error");
return -1;
}
#ifdef AIX
memfree *= 4;
#endif
*percent = 100 - 100*((float)memfree/(float)memsize);
if (*percent > 100)
{
*percent = 100.00;
}
if (*percent < 0)
{
strcpy(errbuf, "2:get memory load error");
return -1;
}
return 0;
}
int GetSysMemSize(unsigned long *memsize, char *errbuf)
{
char buffer[MIN_BUF_LEN];
unsigned long memfree = 0;
int ret;
//memset(buffer, 0,sizeof(buffer));
//sprintf(buffer, "%s", "LANG=POSIX");
//putenv(buffer);
#if defined(SOLARIS) || defined(AIX)
//fp=popen(MEMSIZECMD,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
ret = my_system(MEMSIZECMD, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
*memsize = strtoul(buffer,NULL,10);
#elif defined(LINUX)
//fp=popen(PHYSICAL_MEMORY_COMMAND,"r");
//fgets(buffer,sizeof(buffer),fp);
//pclose(fp);
ret = my_system(PHYSICAL_MEMORY_COMMAND, DEFAULT_COMMAND_TIMEOUT, buffer, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
sscanf(buffer,"%lu,%lu",memsize,&memfree);
#endif
if (*memsize <= 0)
{
strcpy(errbuf, "2:get memory size error");
return -1;
}
return 0;
}
int GetProcCpuUsage(unsigned int pid, float *percent, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[MIN_BUF_LEN];
int ret;
#if defined(SOLARIS)
sprintf(szCmd,"ps -eo \"pid pcpu pmem rss args\" | awk 'BEGIN{pid=\"%d\";}NR>1{if(pid == $1)printf \"%%.02f\",$2;}'",pid);
#else
sprintf(szCmd,"ps auwwx | awk 'BEGIN{pid=\"%d\";}NR>1{if(pid == $2)printf \"%%.02f\",$3;}'", pid);
#endif
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
if(strlen(szBuf)>0)
{
*percent = atof(szBuf);
}
else
{
*percent = 0.00;
}
return 0;
}
int GetProcMemUsage(unsigned int pid, float *percent, char *errbuf)
{
char szCmd[MIN_BUF_LEN];
char szBuf[COM_BUF_LEN];
int ret;
#if defined(SOLARIS)
sprintf(szCmd,"ps -eo \"pid pcpu pmem rss args\" | awk 'BEGIN{pid=\"%d\";}NR>1{if(pid == $1)printf \"%%.02f\",$3;}'",pid);
#else
sprintf(szCmd,"ps auwwx | awk 'BEGIN{pid=\"%d\";}NR>1{if(pid == $2)printf \"%%.02f\",$4;}'",pid);
#endif
ret = my_system(szCmd, DEFAULT_COMMAND_TIMEOUT, szBuf, MIN_BUF_LEN);
if (ret != 0)
{
strcpy(errbuf, "2:my_system() error");
return -1;
}
if(strlen(szBuf)>0)
{
*percent = atof(szBuf);
}
else
{
*percent = 0.00;
}
return 0;
}
#endif
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -