X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgroup.c;h=729cc75e6704cf39e35f98a68eed1ad0f6eb18d4;hp=392736f987f82d1b23f3ce9705005e3dc618e99e;hb=e67c3609b18ab09499b361e18addfcfdec853fdd;hpb=bd40a2d830265cdd36eb19576bdbe8e41dd527ee diff --git a/src/cgroup.c b/src/cgroup.c index 392736f98..729cc75e6 100644 --- a/src/cgroup.c +++ b/src/cgroup.c @@ -403,7 +403,7 @@ char *cgroup_bonding_to_string(CGroupBonding *b) { pid_t cgroup_bonding_search_main_pid(CGroupBonding *b) { FILE *f; - pid_t pid = 0, npid; + pid_t pid = 0, npid, mypid; assert(b); @@ -413,15 +413,22 @@ pid_t cgroup_bonding_search_main_pid(CGroupBonding *b) { if (cg_enumerate_processes(b->controller, b->path, &f) < 0) return 0; + mypid = getpid(); + while (cg_read_pid(f, &npid) > 0) { + pid_t ppid; if (npid == pid) continue; + /* Ignore processes that aren't our kids */ + if (get_parent_of_pid(npid, &ppid) >= 0 && ppid != mypid) + continue; + if (pid != 0) { - /* Dang, there's more than one PID in this - * group, so we don't know what process is the - * main process. */ + /* Dang, there's more than one daemonized PID + in this group, so we don't know what process + is the main process. */ pid = 0; break; }