diff --git a/src/cgutil.c b/src/cgutil.c index d05003be..5d402ef7 100644 --- a/src/cgutil.c +++ b/src/cgutil.c @@ -108,6 +108,25 @@ char *pid_comm(int pid, char *buf, size_t len) return chomp(buf); } +char *pid_cgroup(int pid, char *buf, size_t len) +{ + char *ptr; + FILE *fp; + + fp = fopenf("r", "/proc/%d/cgroup", pid); + if (!fp) + return NULL; + + fgets(buf, len, fp); + fclose(fp); + + ptr = strchr(buf, '/'); + if (!ptr) + return NULL; + + return chomp(ptr); +} + static uint64_t cgroup_uint64(char *path, char *file) { uint64_t val = 0; @@ -159,6 +178,16 @@ static uint64_t cgroup_memuse(struct cg *cg) return cg->cg_vmsize = cgroup_uint64(cg->cg_path, "memory.current"); } +uint64_t cgroup_memory(char *group) +{ + char path[256]; + + paste(path, sizeof(path), FINIT_CGPATH, group); + printf("DBG: %s (%s)\n", path, group); + + return cgroup_uint64(path, "memory.current"); +} + static float cgroup_cpuload(struct cg *cg) { char fn[256]; diff --git a/src/cgutil.h b/src/cgutil.h index c3dbde17..614809fa 100644 --- a/src/cgutil.h +++ b/src/cgutil.h @@ -24,10 +24,14 @@ #ifndef FINIT_CGUTIL_H_ #define FINIT_CGUTIL_H_ +#include #include char *pid_cmdline (int pid, char *buf, size_t len); char *pid_comm (int pid, char *buf, size_t len); +char *pid_cgroup (int pid, char *buf, size_t len); + +uint64_t cgroup_memory(char *group); int cgroup_tree (char *path, char *pfx, int top);