Linux下獲得CPU利用率和記憶體使用量情況

來源:互聯網
上載者:User

在Linux中如果要監視一個進程的運行情況,如查看它的CPU使用效率和記憶體使用量情況,就需要從系統的/proc目錄的讀取一些系統資訊。然後分析得到結果,特別是在嵌入式中的應用程式這個功能就很重要。本文中的代碼是從top命令的原始碼分析中獲得,並做了部分修改,在FC6+GCC4.1調試通過。從這個工程中我也獲得一些感悟。

1. Linux系統很優雅,如果在Windows中做這個功能就需要調用ActiveX控制項。而在Linux中只需要讀取文本。

2.想完成什麼功能,如果不知道怎麼做,就想有沒有沒有其它的軟體有這個功能,如果有,查看它的原始碼就可以了,然後定製自己需要的功能。

3.多想多看多做,學習技術的不二法門。

top命令原始碼下載:http://www.groupsys.com/top/download.shtml

工程下載: http://www.cppblog.com/Files/dyj057/mytop.zip

下面是獲得系統CPU和記憶體情況的代碼:

voidget_system_info(info)   struct system_info * info;{   char buffer[ 4096 + 1 ];   int fd,len;   char  * p;   int i;   /* getloadaverages */   {   fd = open( " loadavg " ,O_RDONLY);   len = read(fd,buffer, sizeof (buffer) - 1 );   close(fd);   buffer[len] =  ' ' ;   info -> load_avg[ 0 ] = strtod(buffer, & p);   info -> load_avg[ 1 ] = strtod(p, & p);   info -> load_avg[ 2 ] = strtod(p, & p);   p = skip_token(p);       /* skiprunning/tasks */   p = skip_ws(p);   if ( * p)     info -> last_pid = atoi(p);   else     info -> last_pid =  - 1 ;   }   /* getthecputimeinfo */   {   fd = open( " stat " ,O_RDONLY);   len = read(fd,buffer, sizeof (buffer) - 1 );   close(fd);   buffer[len] =  ' ' ;   p = skip_token(buffer);       /* "cpu" */   cp_time[ 0 ] = strtoul(p, & p, 0 );     cp_time[ 1 ] = strtoul(p, & p, 0 );   cp_time[ 2 ] = strtoul(p, & p, 0 );   cp_time[ 3 ] = strtoul(p, & p, 0 );   /* convertcp_timecountstopercentages */   percentages( 4 ,cpu_states,cp_time,cp_old,cp_diff);   }     /* getsystemwidememoryusage */   {   char  * p;   fd = open( " meminfo " ,O_RDONLY);   len = read(fd,buffer, sizeof (buffer) - 1 );   close(fd);   buffer[len] =  ' ' ;   /* bepreparedforextracolumnstoappearbeseeking    toendsoflines */     p = buffer;   p = skip_token(p);   memory_stats[ 0 ] = strtoul(p, & p, 10 ); /* totalmemory */     p = strchr(p, ' ' );   p = skip_token(p);   memory_stats[ 1 ] = strtoul(p, & p, 10 ); /* freememory */       p = strchr(p, ' ' );   p = skip_token(p);   memory_stats[ 2 ] = strtoul(p, & p, 10 ); /* buffermemory */     p = strchr(p, ' ' );   p = skip_token(p);   memory_stats[ 3 ] = strtoul(p, & p, 10 ); /* cachedmemory */     for (i =  0 ;i <  8 ;i ++ ){     p ++ ;     p = strchr(p, ' ' );   }     p = skip_token(p);   memory_stats[ 4 ] = strtoul(p, & p, 10 ); /* totalswap */     p = strchr(p, ' ' );   p = skip_token(p);   memory_stats[ 5 ] = strtoul(p, & p, 10 ); /* freeswap */     }   /* setarraysandstrings */   info -> cpustates = cpu_states;   info -> memory = memory_stats;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.