207 |
|
#endif |
208 |
|
|
209 |
|
#ifdef ALLBSD |
210 |
+ |
mib[0] = CTL_KERN; |
211 |
+ |
mib[1] = KERN_PROC; |
212 |
+ |
mib[2] = KERN_PROC_ALL; |
213 |
|
|
214 |
< |
#if defined(NETBSD) || defined(OPENBSD) |
215 |
< |
kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL); |
216 |
< |
#else |
214 |
< |
kvmd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, NULL); |
215 |
< |
#endif |
214 |
> |
if(sysctl(mib, 3, NULL, &size, NULL, 0) < 0) { |
215 |
> |
return NULL; |
216 |
> |
} |
217 |
|
|
218 |
< |
if(kvmd == NULL) return NULL; |
218 |
> |
procs = size / sizeof(struct kinfo_proc); |
219 |
|
|
220 |
< |
kp_stats = kvm_getprocs(kvmd, KERN_PROC_ALL, 0, &procs); |
220 |
> |
kp_stats = malloc(size); |
221 |
> |
if(kp_stats == NULL) { |
222 |
> |
return NULL; |
223 |
> |
} |
224 |
|
|
225 |
< |
if (kp_stats == NULL || procs < 0) { |
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, |
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) { |
330 |
|
/* This is in pages */ |
331 |
|
proc_state_ptr->proc_resident = |
332 |
|
kp_stats[i].kp_eproc.e_vm.vm_rssize * getpagesize(); |
321 |
– |
/* This is in microseconds */ |
333 |
|
#if defined(NETBSD) || defined(OPENBSD) |
334 |
|
proc_state_ptr->time_spent = |
335 |
|
kp_stats[i].kp_proc.p_rtime.tv_sec; |
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 |