This commit adds the lxc_cgroup_attach function that adds a pid to the tasks
file of a specific cgroup in all subsystems. This is required for lxc-attach
to be able to put newly started processes in the same cgroup as the
container.
---
src/lxc/cgroup.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
src/lxc/cgroup.h | 1 +
2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
index 6ae67bd..db5d2fa 100644
--- a/src/lxc/cgroup.c
+++ b/src/lxc/cgroup.c
@@ -433,3 +433,50 @@ int lxc_cgroup_nrtasks(const char *name)
return count;
}
+
+int lxc_cgroup_attach(const char *name, pid_t pid)
+{
+ char cgname[MAXPATHLEN];
+ struct mntent *mntent;
+ FILE *file = NULL;
+ int err = -1;
+ int found = 0;
+
+ file = setmntent(MTAB, "r");
+ if (!file) {
+ SYSERROR("failed to open %s", MTAB);
+ return -1;
+ }
+
+ while ((mntent = getmntent(file))) {
+
+ DEBUG("checking '%s' (%s)", mntent->mnt_dir, mntent->mnt_type);
+
+ if (!strcmp(mntent->mnt_type, "cgroup")) {
+
+ INFO("[%d] found cgroup mounted at '%s',opts='%s'",
+ ++found, mntent->mnt_dir, mntent->mnt_opts);
+
+ snprintf(cgname, MAXPATHLEN, "%s/%s",
+ mntent->mnt_dir, name);
+
+ if (access(cgname, F_OK)) {
+ ERROR("No cgroup '%s' found "
+ "in subsystem mounted at '%s'",
+ name, mntent->mnt_dir);
+ goto out;
+ }
+
+ err = cgroup_attach(cgname, pid);
+ if (err)
+ goto out;
+ }
+ };
+
+ if (!found)
+ ERROR("No cgroup mounted on the system");
+
+out:
+ endmntent(file);
+ return err;
+}
diff --git a/src/lxc/cgroup.h b/src/lxc/cgroup.h
index 31dd2de..3c90696 100644
--- a/src/lxc/cgroup.h
+++ b/src/lxc/cgroup.h
@@ -30,5 +30,6 @@ extern int lxc_cgroup_create(const char *name, pid_t pid);
extern int lxc_cgroup_destroy(const char *name);
extern int lxc_cgroup_path_get(char **path, const char *subsystem, const char
*name);
extern int lxc_cgroup_nrtasks(const char *name);
+extern int lxc_cgroup_attach(const char *name, pid_t pid);
extern int lxc_ns_is_mounted(void);
#endif
--
1.7.2.5
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Lxc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lxc-devel