资源简介

用在嵌入式linux平台上,通常busybox的top无法看到多线程应用的每个线程的cpu占用率,特地编写了这个小工具.

资源截图

代码片段和文件信息

/*****************************************************************************/
// /opt/t500/tools/uclibc/bin/mips-uclibc-gcc -static -o mytop2 mytop2.c
/*
 *      cpu.c -- simple CPU usage reporting tool.
 *
 *      (C) Copyright 2000 Greg Ungerer (gerg@lineo.com)
 */

/*****************************************************************************/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#define VALID_PROCSTATE 0xa84b62fc

struct procState
{
        char procname[32];
        FILE * fp;
        int pid;
        unsigned int utimeold;
        unsigned int utimenew;
        unsigned int stimeold;
        unsigned int stimenew;
        unsigned int allold;
        unsigned int allnew;
        int valid;
};

#define MAX_THREADS_NUM 100
struct procState lanProc[MAX_THREADS_NUM];
int procTotal=0;
char targetProcName[64]=““;
int targetProcPid=0;

char taskName[64]=““;
FILE            *taskfp;
FILE            *statfp;

char *version = “1.0.0“;
char            *procdevice = “/proc/stat“;

struct dirent *taskdirent;
DIR * taskdir;

struct stats
{
        unsigned int    user;
        unsigned int    nice;
        unsigned int    system;
        unsigned int    idle;
        unsigned int    total;
};

void readprocessstat( void );

int getdata(struct stats *st)
{
        unsigned char   buf[80];
        int i;


        for(i=0;i        {
                if ((lanProc[i].fp = fopen(lanProc[i].procname“r“)) == NULL) {
                      fprintf(stderr “ERROR: failed errno=%d\n“ errno);
                      exit(-1);
                }

                fscanf(lanProc[i].fp “%d %s %s %s %s %s %s %s %s %s %s %s %s %lu %lu“ &lanProc[i].pid
                       &buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]&buf[0]
                       &lanProc[i].utimenew&lanProc[i].stimenew);
fclose(lanProc[i].fp);
        }

        if ((statfp = fopen(procdevice “r“)) == NULL) {
                fprintf(stderr “ERROR: failed to open %s errno=%d\n“
                        procdevice errno);
                exit(0);
        }

        fscanf(statfp “%s %d %d %d %d“ &buf[0] &st->user &st->nice&st->system &st->idle);
fclose(statfp);

        st->total = st->user + st->nice + st->system + st->idle;
        for(i=0;i        {
                lanProc[i].allnew = lanProc[i].utimenew + lanProc[i].stimenew;
        }

        return(0);
}

void usage(FILE *fp int rc)
{
        fprintf(fp “Usage: cpu [-h?ra] [-s seconds] [-c count] “
                “[-d ]\n\n“);
        fprintf(fp “        -h?            this help\n“);

评论

共有 条评论