using namespace std;
#include "hprocessstat.h"
#include <fstream>
#include <iostream>
#include <iomanip>
ClassImp(HProcessStat)
HProcessStat::HProcessStat(const char* name,const char* title)
:TNamed(name,title)
{
}
HProcessStat::HProcessStat()
{
}
HProcessStat::~HProcessStat(){}
void HProcessStat::print()
{
printf("####### Process Stat #############\n");
printf("pid :%i\n",pid);
printf("name :%s\n",name);
printf("priority :%i\n",pri);
printf("nice :%i\n",nice);
printf("size :%ld\n",size);
printf("rss :%ld\n",rss);
switch (state)
{
case 1: printf("state : R\n"); break;
case 2: printf("state : S\n"); break;
case 3: printf("state : D\n"); break;
case 4: printf("state : Z\n"); break;
case 5: printf("state : T\n"); break;
case 6: printf("state : W\n"); break;
}
printf("time :%ld\n",time);
printf("pcpu :%f\n",pcpu);
printf("wcpu :%f\n",wcpu);
printf("##################################\n");
}
void HProcessStat::update()
{
char buffer[4096], *p;
// grab the proc stat info in one go
{
int fd, len;
sprintf(buffer, "/proc/%d/stat", pid);
fd = open(buffer,O_RDONLY);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
buffer[len] = '0';
}
// proc->uid = proc_owner(pid);
// parse out the status
p = buffer;
p = strchr(p, '(')+1; // skip pid
{
char *q = strrchr(p, ')');
int len = q-p;
if (len >= (Int_t) sizeof(name))
len = sizeof(name)-1;
memcpy(name, p, len);
name[len] = 0;
p = q+1;
}
p = skip_ws(p);
switch (*p++)
{
case 'R': state = 1; break;
case 'S': state = 2; break;
case 'D': state = 3; break;
case 'Z': state = 4; break;
case 'T': state = 5; break;
case 'W': state = 6; break;
}
p = skip_token(p); // skip ppid
p = skip_token(p); // skip pgrp
p = skip_token(p); // skip session
p = skip_token(p); // skip tty
p = skip_token(p); // skip tty pgrp
p = skip_token(p); // skip flags
p = skip_token(p); // skip min flt
p = skip_token(p); // skip cmin flt
p = skip_token(p); // skip maj flt
p = skip_token(p); // skip cmaj flt
time = strtoul(p, &p, 10); // utime
time += strtoul(p, &p, 10); // stime
p = skip_token(p); // skip cutime
p = skip_token(p); // skip cstime
pri = strtol(p, &p, 10); // priority
nice = strtol(p, &p, 10); // nice
p = skip_token(p); // skip timeout
p = skip_token(p); // skip it_real_val
p = skip_token(p); // skip start_time
size = bytetok(strtoul(p, &p, 10)); // vsize
rss = pagetok(strtoul(p, &p, 10)); // rss
//#if 0
// for the record, here are the rest of the fields
p = skip_token(p); // skip rlim
p = skip_token(p); // skip start_code
p = skip_token(p); // skip end_code
p = skip_token(p); // skip start_stack
p = skip_token(p); // skip sp
p = skip_token(p); // skip pc
p = skip_token(p); // skip signal
p = skip_token(p); // skip sigblocked
p = skip_token(p); // skip sigignore
p = skip_token(p); // skip sigcatch
p = skip_token(p); // skip wchan
//#endif
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.