| 612 | } |
| 613 | |
| 614 | void findChildProcesses(Process& parent, std::vector<Process>& processes) |
| 615 | { |
| 616 | // find all processes that are direct children of `parent` |
| 617 | auto itor = processes.begin(); |
| 618 | |
| 619 | while (itor != processes.end()) { |
| 620 | if (itor->ppid() == parent.pid()) { |
| 621 | parent.addChild(*itor); |
| 622 | itor = processes.erase(itor); |
| 623 | } else { |
| 624 | ++itor; |
| 625 | } |
| 626 | } |
| 627 | |
| 628 | // find all processes that are direct children of `parent`'s children |
| 629 | for (auto&& c : parent.children()) { |
| 630 | findChildProcesses(c, processes); |
| 631 | } |
| 632 | } |
| 633 | |
| 634 | Process getProcessTreeFromJob(HANDLE h) |
| 635 | { |