From d72e395ac6107e89b92e1c931b4b84ca42f60c2b Mon Sep 17 00:00:00 2001 From: Angelo Marletta Date: Thu, 7 Jun 2012 02:24:56 +0100 Subject: started process iterator for FreeBSD. still unstable. --- src/Makefile | 2 +- src/process.c | 2 +- src/procutils.c | 21 +++++++++++++++++++++ src/procutils.h | 2 +- 4 files changed, 24 insertions(+), 3 deletions(-) mode change 100644 => 100755 src/Makefile (limited to 'src') diff --git a/src/Makefile b/src/Makefile old mode 100644 new mode 100755 index 6deb69b..6e7a89e --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,7 @@ CC?=gcc CFLAGS?=-Wall -O2 -D_GNU_SOURCE TARGETS=cpulimit -LIBS=process.o procutils.o list.o +LIBS=process.o procutils.o list.o -lkvm all:: $(TARGETS) diff --git a/src/process.c b/src/process.c index 4f7403b..73c5883 100644 --- a/src/process.c +++ b/src/process.c @@ -170,7 +170,7 @@ static int get_jiffies(struct process *proc) { return -1; } - process_data = kvm_getprocs(my_kernel, KERN_PROC_PID, pid, &processes); + process_data = kvm_getprocs(my_kernel, KERN_PROC_PID, proc->pid, &processes); if ( (process_data) && (processes >= 1) ) my_jiffies = process_data->ki_runtime; diff --git a/src/procutils.c b/src/procutils.c index fb7aaae..7cf0e71 100644 --- a/src/procutils.c +++ b/src/procutils.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "procutils.h" @@ -37,6 +38,10 @@ #include #endif +#ifdef __FreeBSD__ +#include +#endif + /* PROCESS STATISTICS FUNCTIONS */ //deprecated @@ -190,6 +195,22 @@ int init_process_iterator(struct process_iterator *i) { i->procList = result; i->count = err == 0 ? length / sizeof *result : 0; i->c = 0; +#elif defined __FreeBSD__ + kvm_t *kd; + struct kinfo_proc *procs = NULL; + char errbuf[_POSIX2_LINE_MAX]; + int count; + /* Open the kvm interface, get a descriptor */ + if ((kd = kvm_open(NULL, NULL, NULL, 0, errbuf)) == NULL) { + /* fprintf(stderr, "kvm_open: %s\n", errbuf); */ + fprintf(stderr, "kvm_open: ", errbuf); + } + /* Get the list of processes. */ + if ((procs = kvm_getprocs(kd, KERN_PROC_ALL, 0, &count)) == NULL) { + kvm_close(kd); + /* fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(kd)); */ + fprintf(stderr, "kvm_getprocs: ", kvm_geterr(kd)); + } #endif i->current = (struct process*)calloc(1, sizeof(struct process)); diff --git a/src/procutils.h b/src/procutils.h index b5a91a3..c39a239 100644 --- a/src/procutils.h +++ b/src/procutils.h @@ -62,7 +62,7 @@ struct process_iterator { struct kinfo_proc *procList; int count; int c; -#elif defined __hpux +#elif defined __FreeBSD__ int count; #endif struct process *current; -- cgit v1.2.3