in OpsWorks/sample-cookbooks/cpulimit-ruby/files/default/cpulimit-master/src/process_iterator_apple.c [90:128]
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) {
struct proc_taskallinfo ti;
if (get_process_pti(it->filter->pid, &ti) != 0) {
it->i = it->count = 0;
return -1;
}
it->i = it->count = 1;
return pti2proc(&ti, p);
}
while (it->i < it->count) {
struct proc_taskallinfo ti;
if (get_process_pti(it->pidlist[it->i], &ti) != 0) {
it->i++;
continue;
}
if (ti.pbsd.pbi_flags & PROC_FLAG_SYSTEM) {
it->i++;
continue;
}
if (it->filter->pid != 0 && it->filter->include_children) {
pti2proc(&ti, p);
it->i++;
if (p->pid != it->pidlist[it->i - 1]) // I don't know why this can happen
continue;
if (p->pid != it->filter->pid && p->ppid != it->filter->pid)
continue;
return 0;
}
else if (it->filter->pid == 0)
{
pti2proc(&ti, p);
it->i++;
return 0;
}
}
return -1;
}