diff --git a/src/cgroup.c b/src/cgroup.c index 8565b3a0..4a19c21c 100644 --- a/src/cgroup.c +++ b/src/cgroup.c @@ -98,11 +98,11 @@ fail: fclose(fp); } -static int move_pid(char *group, char *name, int pid) +static int move_pid(char *group, char *name, char *id, int pid) { char path[256]; - snprintf(path, sizeof(path), "/sys/fs/cgroup/%s/%s", group, name); + snprintf(path, sizeof(path), "/sys/fs/cgroup/%s/%s:%s", group, name, id); if (mkdir(path, 0755) && errno != EEXIST) return 1; @@ -116,13 +116,11 @@ int cgroup_user(char *name) if (!cg_init) return 0; - return move_pid("finit/user", name, getpid()); + return move_pid("finit/user", name, "0", getpid()); } -int cgroup_service(char *cmd, int pid) +int cgroup_service(char *nm, char *id, int pid) { - char *nm; - if (!cg_init) return 0; @@ -131,13 +129,7 @@ int cgroup_service(char *cmd, int pid) return 1; } - nm = strrchr(cmd, '/'); - if (nm) - nm++; - else - nm = cmd; - - return move_pid("finit/system", nm, pid); + return move_pid("finit/system", nm, id, pid); } /** diff --git a/src/cgroup.h b/src/cgroup.h index 8e507cc6..20400584 100644 --- a/src/cgroup.h +++ b/src/cgroup.h @@ -27,6 +27,6 @@ void cgroup_init (void); int cgroup_user (char *name); -int cgroup_service (char *cmd, int pid); +int cgroup_service (char *cmd, char *id, int pid); #endif /* FINIT_CGROUP_H_ */ diff --git a/src/service.c b/src/service.c index b7c9bc2e..4c6b6368 100644 --- a/src/service.c +++ b/src/service.c @@ -319,7 +319,7 @@ static int service_start(svc_t *svc) sigprocmask(SIG_BLOCK, &nmask, &omask); pid = fork(); - cgroup_service(svc->cmd, pid); + cgroup_service(svc->name, svc->id, pid); if (pid == 0) { int status;