in OpsWorks/sample-cookbooks/cpulimit-ruby/files/default/cpulimit-master/src/process_iterator_linux.c [129:164]
int get_next_process(struct process_iterator *it, struct process *p)
{
if (it->dip == NULL)
{
//end of processes
return -1;
}
if (it->filter->pid != 0 && !it->filter->include_children)
{
int ret = read_process_info(it->filter->pid, p);
//p->starttime += it->boot_time;
closedir(it->dip);
it->dip = NULL;
if (ret != 0) return -1;
return 0;
}
struct dirent *dit = NULL;
//read in from /proc and seek for process dirs
while ((dit = readdir(it->dip)) != NULL) {
if(strtok(dit->d_name, "0123456789") != NULL)
continue;
p->pid = atoi(dit->d_name);
if (it->filter->pid != 0 && it->filter->pid != p->pid && !is_child_of(p->pid, it->filter->pid)) continue;
read_process_info(p->pid, p);
//p->starttime += it->boot_time;
break;
}
if (dit == NULL)
{
//end of processes
closedir(it->dip);
it->dip = NULL;
return -1;
}
return 0;
}