chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
systemctl: introduce --ignore-dependencies
[elogind.git]
/
src
/
cgroup.c
diff --git
a/src/cgroup.c
b/src/cgroup.c
index 392736f987f82d1b23f3ce9705005e3dc618e99e..729cc75e6704cf39e35f98a68eed1ad0f6eb18d4 100644
(file)
--- 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 cgroup_bonding_search_main_pid(CGroupBonding *b) {
FILE *f;
- pid_t pid = 0, npid;
+ pid_t pid = 0, npid
, mypid
;
assert(b);
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;
if (cg_enumerate_processes(b->controller, b->path, &f) < 0)
return 0;
+ mypid = getpid();
+
while (cg_read_pid(f, &npid) > 0) {
while (cg_read_pid(f, &npid) > 0) {
+ pid_t ppid;
if (npid == pid)
continue;
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) {
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;
}
pid = 0;
break;
}