aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAngelo Marletta <angelo.marletta@gmail.com>2012-06-06 18:08:02 +0100
committerAngelo Marletta <angelo.marletta@gmail.com>2012-06-06 18:08:02 +0100
commit3c10d8dc5820fde90bd293d95d82f5e4302d1c7d (patch)
treea3a9bc3f62bc82aa62112d902887e58e320b2f06 /src
parentffcaeb2f05dea9a6387e1d24bc9671c1aa879964 (diff)
downloadcpulimit-3c10d8dc5820fde90bd293d95d82f5e4302d1c7d.tar.gz
merged freebsd patch (from jesse smith)
Diffstat (limited to 'src')
-rw-r--r--src/process.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c
index 398d9e9..4f7403b 100644
--- a/src/process.c
+++ b/src/process.c
@@ -36,6 +36,16 @@
#include <errno.h>
#endif
+#ifdef __FreeBSD__
+#include <limits.h>
+#include <fcntl.h>
+#include <kvm.h>
+#include <paths.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/user.h>
+#endif
+
#ifdef __linux__
int get_proc_info(struct process *p, pid_t pid) {
/* static char statfile[20];
@@ -148,6 +158,26 @@ static int get_jiffies(struct process *proc) {
struct process proc2;
get_proc_info(&proc2, proc->pid);
return proc2.last_jiffies;
+#elif defined __FreeBSD__
+ kvm_t *my_kernel = NULL;
+ struct kinfo_proc *process_data = NULL;
+ int processes;
+ int my_jiffies = -1;
+ my_kernel = kvm_open(0, 0, 0, O_RDONLY, "kvm_open");
+ if (! my_kernel)
+ {
+ printf("Error opening kernel vm. You should be running as root.\n");
+ return -1;
+ }
+
+ process_data = kvm_getprocs(my_kernel, KERN_PROC_PID, pid, &processes);
+ if ( (process_data) && (processes >= 1) )
+ my_jiffies = process_data->ki_runtime;
+
+ kvm_close(my_kernel);
+ if (my_jiffies >= 0)
+ my_jiffies /= 1000;
+ return my_jiffies;
#endif
}
Un proyecto texto-plano.xyz