121 |
|
char ps_name[4096]; |
122 |
|
char *ptr; |
123 |
|
VECTOR_DECLARE_STATIC(psargs, char, 128, NULL, NULL); |
124 |
< |
unsigned long stime, utime; |
124 |
> |
unsigned long stime, utime, starttime; |
125 |
|
int x; |
126 |
|
int fn; |
127 |
|
int len; |
128 |
|
int rc; |
129 |
+ |
time_t uptime; |
130 |
|
#endif |
131 |
|
|
132 |
+ |
#ifdef LINUX |
133 |
+ |
if ((f=fopen("/proc/uptime", "r")) == NULL) { |
134 |
+ |
return NULL; |
135 |
+ |
} |
136 |
+ |
if((fscanf(f,"%lu %*d",&uptime)) != 1){ |
137 |
+ |
return NULL; |
138 |
+ |
} |
139 |
+ |
fclose(f); |
140 |
+ |
#endif |
141 |
+ |
|
142 |
|
if((proc_dir=opendir(PROC_LOCATION))==NULL){ |
143 |
|
return NULL; |
144 |
|
} |
188 |
|
if(process_info.pr_lwp.pr_state==6) proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
189 |
|
#endif |
190 |
|
#ifdef LINUX |
191 |
< |
x = fscanf(f, "%d %4096s %c %d %d %*d %*d %*d %*u %*u %*u %*u %*u %lu %lu %*d %*d %*d %d %*d %*d %*u %llu %llu %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*d %*d\n", &(proc_state_ptr->pid), ps_name, &s, &(proc_state_ptr->parent), &(proc_state_ptr->pgid), &utime, &stime, &(proc_state_ptr->nice), &(proc_state_ptr->proc_size), &(proc_state_ptr->proc_resident)); |
192 |
< |
proc_state_ptr->proc_resident = proc_state_ptr->proc_resident * getpagesize(); |
191 |
> |
x = fscanf(f, "%d %4096s %c %d %d %*d %*d %*d %*u %*u %*u %*u %*u %lu %lu %*d %*d %*d %d %*d %*d %lu %llu %llu %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*d %*d\n", &(proc_state_ptr->pid), ps_name, &s, &(proc_state_ptr->parent), &(proc_state_ptr->pgid), &utime, &stime, &(proc_state_ptr->nice), &starttime, &(proc_state_ptr->proc_size), &(proc_state_ptr->proc_resident)); |
192 |
> |
/* +3 becuase man page says "Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes." */ |
193 |
> |
proc_state_ptr->proc_resident = (proc_state_ptr->proc_resident + 3) * getpagesize(); |
194 |
|
if(s == 'S') proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING; |
195 |
|
if(s == 'R') proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
196 |
|
if(s == 'Z') proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE; |
206 |
|
return NULL; |
207 |
|
} |
208 |
|
|
209 |
< |
/* Need to do cpu */ |
210 |
< |
|
209 |
> |
/* cpu */ |
210 |
> |
proc_state_ptr->cpu_percent = (100.0 * (utime + stime)) / ((uptime * 100.0) - starttime); |
211 |
> |
printf("%s ut: %lu st: %lu up: %lu start: %lu\n", proc_state_ptr->process_name, utime, stime, uptime , starttime); |
212 |
|
|
213 |
|
fclose(f); |
214 |
|
|