1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      Linux下獲得CPU利用率和內存使用情況

      更新時間: 2007-06-20 10:22:04來源: 粵嵌教育瀏覽量:988

        在Linux中如果要監視一個進程的運行情況,如查看它的CPU使用效率和內存使用情況,就需要從系統的/proc目錄的讀取一些系統信息。

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

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

        2.想完成什么功能,如果不知道怎么做,就想有沒有沒有其它的軟件有這個功能,如果有,查看它的源代碼就可以了,然后定制自己需要的功能。

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

        下面是獲得系統CPU和內存情況的代碼:

        void
        get_system_info(info)
        struct system_info * info;
        {
        char buffer[ 4096 + 1 ];
        int fd, len;
        char * p;
        int i;
        /* get load averages */
        {
        fd = open( " loadavg " , O_RDONLY);
        len = read(fd, buffer, sizeof (buffer) - 1 );
        close(fd);
        buffer[len] = ' \0 ' ;
        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); /* skip running/tasks */
        p = skip_ws(p);
        if ( * p)
        info -> last_pid = atoi(p);
        else
        info -> last_pid = - 1 ;
        }
        /* get the cpu time info */
        {
        fd = open( " stat " , O_RDONLY);
        len = read(fd, buffer, sizeof (buffer) - 1 );
        close(fd);
        buffer[len] = ' \0 ' ;
        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 );
        /* convert cp_time counts to percentages */
        percentages( 4 , cpu_states, cp_time, cp_old, cp_diff);
        }
        /* get system wide memory usage */
        {
        char * p;
        fd = open( " meminfo " , O_RDONLY);
        len = read(fd, buffer, sizeof (buffer) - 1 );
        close(fd);
        buffer[len] = ' \0 ' ;
        /* be prepared for extra columns to appear be seeking
        to ends of lines */
        p = buffer;
        p = skip_token(p);
        memory_stats[ 0 ] = strtoul(p, & p, 10 ); /* total memory */
        p = strchr(p, ' \n ' );
        p = skip_token(p);
        memory_stats[ 1 ] = strtoul(p, & p, 10 ); /* free memory */
        p = strchr(p, ' \n ' );
        p = skip_token(p);
        memory_stats[ 2 ] = strtoul(p, & p, 10 ); /* buffer memory */
        p = strchr(p, ' \n ' );
        p = skip_token(p);
        memory_stats[ 3 ] = strtoul(p, & p, 10 ); /* cached memory */
        for (i = 0 ; i < 8 ;i ++ ) {
        p ++ ;
        p = strchr(p, ' \n ' );
        }
        p = skip_token(p);
        memory_stats[ 4 ] = strtoul(p, & p, 10 ); /* total swap */
        p = strchr(p, ' \n ' );
        p = skip_token(p);
        memory_stats[ 5 ] = strtoul(p, & p, 10 ); /* free swap */
        }
        /* set arrays and strings */
        info -> cpustates = cpu_states;
        info -> memory = memory_stats;

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲天堂在线2024 | 亚洲成年人免费AV | 亚洲国产综合一区 | 偷自拍亚洲综合在线不卡 | 亚洲一区二区在线 | 日韩高清在线观看不卡一区二区 |