我下面实现的代码主要是对系统中squid进程监控的一个函数,这个函数主要实现的功能就是取得squid实时占系统内存的比率,并与函数传递进来的maxmem比较,如果小于它就返回0,反之,返回1。其中取得该进程的内存比主要是通过top或者ps等系统命令来实现的。
代码如下:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//get squid memory scale
int squid_mem_info(int maxmem)
{
FILE *stream;
char buf[1024] = "";
char mem[32] = "";
float float_mem;
float float_maxmem;
float_maxmem = (float)maxmem;
memset( buf, '\0', sizeof(buf) );
//stream = popen("./top -d 1 -o cpu |grep -r \"squid\" |awk '{print $9}'", "r" );
stream = popen("ps acux|grep squid |grep -v \"0.00\" |awk '{print $4}'","r"); //通过ps取得squid占系统的内存比,上面注释的也可以,只需调整一下。
fread( buf, sizeof(char), sizeof(buf), stream);
if(strlen(buf)==0){ //when squid is not run.
float_mem = 0.1;
}else{
float_mem = atof(mem);
}
if(float_mem > float_maxmem){
printf("float_mem > float_maxmem\n");
return 1;
}else{
printf("float_mem <= float_maxmem\n");
return 0;
}
pclose( stream );
}
int main( void )
{
squid_mem_info(10);
return 0;
}
运行结果:
float_mem <= float_maxmem
这段代码主要是告诉我们如何通过ps,top等命令取得某一进程系统的内存,CPU等信息。
下面一段代码告诉我们如何通过读取文件得到系统的一些信息,如系统总的内存,空闲内存,交换分区大小等等。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int mem_scale(char *filename)
{
char total[64]="";
char free[64]="";
char temp[64]="";
char MemTotal[64]="";
char MemFree[64]="";
FILE *fp;
int i, j;
float k;
if ((fp = fopen(filename, "r")) == NULL) {
printf("cannot open outfile\n");
exit(-1);
}
for (i = 0; i < 5; i++) {
fgets(temp, 80, fp);
if (i == 0) {
strcpy(total, temp);
}
if (i == 1) {
strcpy(free, temp);
}
}
fclose(fp);
for (i = 0, j = 0; i < strlen(total); i++) {
if (isdigit(total[i])) {
MemTotal[j++] = total[i];
}
}
for (i = 0, j = 0; i < strlen(free); i++) {
if (isdigit(free[i])) {
MemFree[j++] = free[i];
}
}
printf("memtotal:%ld M\n",atol(MemTotal)/1024);
printf("memfree:%ld M\n",atol(MemFree)/1024);
k = atof(MemFree)/atof(MemTotal);
printf("k:%f\n",k);
if(k>0.4)
return 0;
else
return 1;
}
int main(int argc,char **argv)
{
char infile[15] = "/proc/meminfo";
mem_scale(infile);
return 0;
}
运行结果:
memtotal:3290 M
memfree:3146 M
k:0.956202
--
/**************************************/
Name: Xiong Feng
E-mail:linux0818@gmail.com
MSN:linux0818@hotmail.com
QQ:23562033
Address: GuangZhou.China
/**************************************/
没有评论:
发表评论