ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/process_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/process_stats.c (file contents):
Revision 1.32 by tdb, Sun Apr 4 11:02:30 2004 UTC vs.
Revision 1.36 by tdb, Sun Apr 4 16:12:59 2004 UTC

# Line 207 | Line 207 | int get_proc_snapshot(proc_state_t **ps){
207   #endif
208  
209   #ifdef ALLBSD
210 <        kvmd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL);
210 >        mib[0] = CTL_KERN;
211 >        mib[1] = KERN_PROC;
212 >        mib[2] = KERN_PROC_ALL;
213  
214 <        if(kvmd == NULL) return NULL;
214 >        if(sysctl(mib, 3, NULL, &size, NULL, 0) < 0) {
215 >                return NULL;
216 >        }
217  
218 <        kp_stats = kvm_getprocs(kvmd, KERN_PROC_ALL, 0, &procs);
218 >        procs = size / sizeof(struct kinfo_proc);
219  
220 <        if (kp_stats == NULL || procs < 0) {
220 >        kp_stats = malloc(size);
221 >        if(kp_stats == NULL) {
222                  return NULL;
223          }
224  
225 +        if(sysctl(mib, 3, kp_stats, &size, NULL, 0) < 0) {
226 +                free(kp_stats);
227 +                return NULL;
228 +        }
229 +
230 + #if defined(NETBSD) || defined(OPENBSD)
231 +        kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
232 + #else
233 +        kvmd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL);
234 + #endif
235 +
236          for (i = 0; i < procs; i++) {
237                  /* replace with something more sensible */
238                  proc_state = realloc(proc_state,
# Line 229 | Line 245 | int get_proc_snapshot(proc_state_t **ps){
245   #ifdef FREEBSD5
246                  proc_state_ptr->process_name =
247                          strdup(kp_stats[i].ki_comm);
248 + #elif defined(DFBSD)
249 +                proc_state_ptr->process_name =
250 +                        strdup(kp_stats[i].kp_thread.td_comm);
251   #else
252                  proc_state_ptr->process_name =
253                          strdup(kp_stats[i].kp_proc.p_comm);
# Line 258 | Line 277 | int get_proc_snapshot(proc_state_t **ps){
277                          proc_state_ptr->proctitle = proctitle;
278                  }
279                  else {
280 +                        /* Should probably be returning NULL here */
281                          proc_state_ptr->proctitle =
282                                  malloc(strlen(proc_state_ptr->process_name)+4);
283                          if(proc_state_ptr->proctitle == NULL) {
# Line 282 | Line 302 | int get_proc_snapshot(proc_state_t **ps){
302                  proc_state_ptr->euid = kp_stats[i].ki_uid;
303                  proc_state_ptr->gid = kp_stats[i].ki_rgid;
304                  proc_state_ptr->egid = kp_stats[i].ki_svgid;
305 + #elif defined(DFBSD)
306 +                proc_state_ptr->uid = kp_stats[i].kp_eproc.e_ucred.cr_ruid;
307 +                proc_state_ptr->euid = kp_stats[i].kp_eproc.e_ucred.cr_svuid;
308 +                proc_state_ptr->gid = kp_stats[i].kp_eproc.e_ucred.cr_rgid;
309 +                proc_state_ptr->egid = kp_stats[i].kp_eproc.e_ucred.cr_svgid;
310   #else
311                  proc_state_ptr->uid = kp_stats[i].kp_eproc.e_pcred.p_ruid;
312                  proc_state_ptr->euid = kp_stats[i].kp_eproc.e_pcred.p_svuid;
# Line 305 | Line 330 | int get_proc_snapshot(proc_state_t **ps){
330                  /* This is in pages */
331                  proc_state_ptr->proc_resident =
332                          kp_stats[i].kp_eproc.e_vm.vm_rssize * getpagesize();
333 + #if defined(NETBSD) || defined(OPENBSD)
334 +                proc_state_ptr->time_spent =
335 +                        kp_stats[i].kp_proc.p_rtime.tv_sec;
336 + #elif defined(DFBSD)
337 +                proc_state_ptr->time_spent =
338 +                        ( kp_stats[i].kp_thread.td_uticks +
339 +                        kp_stats[i].kp_thread.td_sticks +
340 +                        kp_stats[i].kp_thread.td_iticks ) / 1000000;
341 + #else
342                  /* This is in microseconds */
343                  proc_state_ptr->time_spent =
344                          kp_stats[i].kp_proc.p_runtime / 1000000;
345 + #endif
346                  proc_state_ptr->cpu_percent =
347                          ((double)kp_stats[i].kp_proc.p_pctcpu / FSCALE) * 100.0;
348                  proc_state_ptr->nice = kp_stats[i].kp_proc.p_nice;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines