131 |
|
|
132 |
|
#ifdef LINUX |
133 |
|
if ((f=fopen("/proc/uptime", "r")) == NULL) { |
134 |
< |
sg_set_error(SG_ERROR_OPEN, "/proc/uptime"); |
134 |
> |
sg_set_error_with_errno(SG_ERROR_OPEN, "/proc/uptime"); |
135 |
|
return NULL; |
136 |
|
} |
137 |
|
if((fscanf(f,"%lu %*d",&uptime)) != 1){ |
142 |
|
#endif |
143 |
|
|
144 |
|
if((proc_dir=opendir(PROC_LOCATION))==NULL){ |
145 |
< |
sg_set_error(SG_ERROR_OPENDIR, PROC_LOCATION); |
145 |
> |
sg_set_error_with_errno(SG_ERROR_OPENDIR, PROC_LOCATION); |
146 |
|
return NULL; |
147 |
|
} |
148 |
|
|
192 |
|
return NULL; |
193 |
|
} |
194 |
|
|
195 |
< |
if(process_info.pr_lwp.pr_state==1) proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING; |
196 |
< |
if(process_info.pr_lwp.pr_state==2) proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
197 |
< |
if(process_info.pr_lwp.pr_state==3) proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE; |
198 |
< |
if(process_info.pr_lwp.pr_state==4) proc_state_ptr->state = SG_PROCESS_STATE_STOPPED; |
199 |
< |
if(process_info.pr_lwp.pr_state==6) proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
195 |
> |
switch (process_info.pr_lwp.pr_state) { |
196 |
> |
case 1: |
197 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING; |
198 |
> |
break; |
199 |
> |
case 2: |
200 |
> |
case 5: |
201 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
202 |
> |
break; |
203 |
> |
case 3: |
204 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE; |
205 |
> |
break; |
206 |
> |
case 4: |
207 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_STOPPED; |
208 |
> |
break; |
209 |
> |
} |
210 |
|
#endif |
211 |
|
#ifdef LINUX |
212 |
|
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)); |
213 |
|
/* +3 becuase man page says "Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes." */ |
214 |
|
proc_state_ptr->proc_resident = (proc_state_ptr->proc_resident + 3) * getpagesize(); |
215 |
< |
if(s == 'S') proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING; |
216 |
< |
if(s == 'R') proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
217 |
< |
if(s == 'Z') proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE; |
218 |
< |
if(s == 'T') proc_state_ptr->state = SG_PROCESS_STATE_STOPPED; |
219 |
< |
if(s == 'D') proc_state_ptr->state = SG_PROCESS_STATE_STOPPED; |
215 |
> |
switch (s) { |
216 |
> |
case 'S': |
217 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_SLEEPING; |
218 |
> |
break; |
219 |
> |
case 'R': |
220 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_RUNNING; |
221 |
> |
break; |
222 |
> |
case 'Z': |
223 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_ZOMBIE; |
224 |
> |
break; |
225 |
> |
case 'T': |
226 |
> |
case 'D': |
227 |
> |
proc_state_ptr->state = SG_PROCESS_STATE_STOPPED; |
228 |
> |
break; |
229 |
> |
} |
230 |
|
|
231 |
|
/* pa_name[0] should = '(' */ |
232 |
|
ptr = strchr(&ps_name[1], ')'); |
327 |
|
mib[2] = KERN_PROC_ALL; |
328 |
|
|
329 |
|
if(sysctl(mib, 3, NULL, &size, NULL, 0) < 0) { |
330 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
330 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, |
331 |
> |
"CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
332 |
|
return NULL; |
333 |
|
} |
334 |
|
|
341 |
|
memset(kp_stats, 0, size); |
342 |
|
|
343 |
|
if(sysctl(mib, 3, kp_stats, &size, NULL, 0) < 0) { |
344 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
344 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, |
345 |
> |
"CTL_KERN.KERN_PROC.KERN_PROC_ALL"); |
346 |
|
free(kp_stats); |
347 |
|
return NULL; |
348 |
|
} |
568 |
|
mib[4] = 0; |
569 |
|
|
570 |
|
if(sysctl(mib, 5, NULL, &size, NULL, 0) < 0) { |
571 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.0"); |
571 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.0"); |
572 |
|
return NULL; |
573 |
|
} |
574 |
|
|
581 |
|
} |
582 |
|
|
583 |
|
if(sysctl(mib, 5, kl_stats, &size, NULL, 0) < 0) { |
584 |
< |
sg_set_error(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.buffersize"); |
584 |
> |
sg_set_error_with_errno(SG_ERROR_SYSCTL, "CTL_KERN.KERN_LWP.pid.structsize.buffersize"); |
585 |
|
return NULL; |
586 |
|
} |
587 |
|
} |