From: Lennart Poettering Date: Sun, 13 Feb 2011 17:52:02 +0000 (+0100) Subject: service: when guessing the main PID don't consider processes that aren't our children X-Git-Tag: v18~28 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=2633eb8317623138f585957fcf8337a99fb1528f;p=elogind.git service: when guessing the main PID don't consider processes that aren't our children --- 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; }