From: Tom Hromatka Date: Fri, 17 Mar 2023 15:23:59 +0000 (-0600) Subject: python: Add python bindings for cgroup_get_procs() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=49e36e8acb98eac3103f0755761a4e0d75c7a0a0;p=thirdparty%2Flibcgroup.git python: Add python bindings for cgroup_get_procs() Add python bindings for cgroup_get_procs(). Signed-off-by: Tom Hromatka Reviewed-by: Kamalesh Babulal (cherry picked from commit 65f3fce51873b54c6c75b392facedd3a9e8ea14f) --- diff --git a/src/python/cgroup.pxd b/src/python/cgroup.pxd index 26446cfd..4e48b8ac 100644 --- a/src/python/cgroup.pxd +++ b/src/python/cgroup.pxd @@ -105,4 +105,6 @@ cdef extern from "libcgroup.h": void cgroup_set_default_systemd_cgroup() int cgroup_compare_cgroup(cgroup *cgroup_a, cgroup *cgroup_b) + + int cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size) # vim: set et ts=4 sw=4: diff --git a/src/python/libcgroup.pyx b/src/python/libcgroup.pyx index d56cdd8a..7e8a2d8d 100644 --- a/src/python/libcgroup.pyx +++ b/src/python/libcgroup.pyx @@ -594,6 +594,39 @@ cdef class Cgroup: else: return False + def get_procs(self): + """Get the processes in this cgroup + + Return: + Returns an integer list of PIDs + + Description: + Invokes the libcgroup C function, cgroup_get_procs(). + cgroup_get_procs() reads each controller's cgroup.procs file + in the cgroup sysfs. The results are then combined together + into a standard Python list of integers. + + Note: + Reads from the cgroup sysfs + """ + pid_list = list() + cdef pid_t *pids + cdef int size + + for ctrl_key in self.controllers: + ret = cgroup.cgroup_get_procs(c_str(self.name), + c_str(self.controllers[ctrl_key].name), &pids, &size) + if ret is not 0: + raise RuntimeError("cgroup_get_procs failed: {}".format(ret)) + + for i in range(0, size): + pid_list.append(int(pids[i])) + + # Remove duplicates + pid_list = [*set(pid_list)] + + return pid_list + def __dealloc__(self): cgroup.cgroup_free(&self._cgp);