aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngelo Marletta <angelo.marletta@gmail.com>2012-06-30 13:38:07 +0100
committerAngelo Marletta <angelo.marletta@gmail.com>2012-06-30 13:40:01 +0100
commit1d7438185d0ac55a49e9adb6f719ef28e5501e0d (patch)
tree85252d613a6c44f520350e6b9af0d5090fb47d50
parentb8f9bdd32fe0c85c3472298bc704cdc31580f189 (diff)
downloadcpulimit-1d7438185d0ac55a49e9adb6f719ef28e5501e0d.tar.gz
new test test_process_group_wrong_pid passes on freebsd. minor fix on linux iterator
-rw-r--r--src/process_group.c2
-rw-r--r--src/process_iterator_freebsd.c23
-rw-r--r--src/process_iterator_linux.c2
3 files changed, 15 insertions, 12 deletions
diff --git a/src/process_group.c b/src/process_group.c
index 00b8129..cb84deb 100644
--- a/src/process_group.c
+++ b/src/process_group.c
@@ -231,4 +231,4 @@ int remove_process(struct process_group *pgroup, int pid)
if (node == NULL) return 2;
delete_node(pgroup->proctable[hashkey], node);
return 0;
-} \ No newline at end of file
+}
diff --git a/src/process_iterator_freebsd.c b/src/process_iterator_freebsd.c
index a4bf38f..a638112 100644
--- a/src/process_iterator_freebsd.c
+++ b/src/process_iterator_freebsd.c
@@ -35,24 +35,23 @@ int init_process_iterator(struct process_iterator *it, struct process_filter *fi
/* Get the list of processes. */
if ((it->procs = kvm_getprocs(it->kd, KERN_PROC_PROC, 0, &it->count)) == NULL) {
kvm_close(it->kd);
- fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(it->kd));
+// fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(it->kd));
return -1;
}
it->filter = filter;
return 0;
}
-static void kproc2proc(kvm_t *kd, struct kinfo_proc *kproc, struct process *proc)
+static int kproc2proc(kvm_t *kd, struct kinfo_proc *kproc, struct process *proc)
{
proc->pid = kproc->ki_pid;
proc->ppid = kproc->ki_ppid;
proc->cputime = kproc->ki_runtime / 1000;
proc->starttime = kproc->ki_start.tv_sec;
char **args = kvm_getargv(kd, kproc, sizeof(proc->command));
- if (args != NULL)
- {
- memcpy(proc->command, args[0], strlen(args[0]) + 1);
- }
+ if (args == NULL) return -1;
+ memcpy(proc->command, args[0], strlen(args[0]) + 1);
+ return 0;
}
static int get_single_process(kvm_t *kd, pid_t pid, struct process *process)
@@ -61,7 +60,7 @@ static int get_single_process(kvm_t *kd, pid_t pid, struct process *process)
struct kinfo_proc *kproc = kvm_getprocs(kd, KERN_PROC_PID, pid, &count);
if (count == 0 || kproc == NULL)
{
- fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(kd));
+// fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(kd));
return -1;
}
kproc2proc(kd, kproc, process);
@@ -73,9 +72,13 @@ int get_next_process(struct process_iterator *it, struct process *p) {
{
return -1;
}
- if (it->filter->pid > 0 && !it->filter->include_children)
+ if (it->filter->pid != 0 && !it->filter->include_children)
{
- get_single_process(it->kd, it->filter->pid, p);
+ if (get_single_process(it->kd, it->filter->pid, p) != 0)
+ {
+ it->i = it->count = 0;
+ return -1;
+ }
it->i = it->count = 1;
return 0;
}
@@ -88,7 +91,7 @@ int get_next_process(struct process_iterator *it, struct process *p) {
it->i++;
continue;
}
- if (it->filter->pid > 0 && it->filter->include_children)
+ if (it->filter->pid != 0 && it->filter->include_children)
{
kproc2proc(it->kd, kproc, p);
it->i++;
diff --git a/src/process_iterator_linux.c b/src/process_iterator_linux.c
index 3e3eea0..43c2771 100644
--- a/src/process_iterator_linux.c
+++ b/src/process_iterator_linux.c
@@ -141,7 +141,7 @@ int get_next_process(struct process_iterator *it, struct process *p)
//end of processes
return -1;
}
- if (it->filter->pid > 0 && !it->filter->include_children)
+ if (it->filter->pid != 0 && !it->filter->include_children)
{
int ret = read_process_info(it->filter->pid, p);
//p->starttime += it->boot_time;
Un proyecto texto-plano.xyz