in OpsWorks/sample-cookbooks/cpulimit-ruby/files/default/cpulimit-master/src/process_iterator_freebsd.c [62:102]
int get_next_process(struct process_iterator *it, struct process *p) {
if (it->i == it->count)
{
return -1;
}
if (it->filter->pid != 0 && !it->filter->include_children)
{
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;
}
while (it->i < it->count)
{
struct kinfo_proc *kproc = &(it->procs[it->i]);
if (kproc->ki_flag & P_SYSTEM)
{
// skip system processes
it->i++;
continue;
}
if (it->filter->pid != 0 && it->filter->include_children)
{
kproc2proc(it->kd, kproc, p);
it->i++;
if (p->pid != it->filter->pid && p->ppid != it->filter->pid)
continue;
return 0;
}
else if (it->filter->pid == 0)
{
kproc2proc(it->kd, kproc, p);
it->i++;
return 0;
}
}
return -1;
}