From: Lennart Poettering Date: Sun, 23 Dec 2012 10:56:13 +0000 (+0100) Subject: systemctl: don't show cgroup field for a unit if cgroup is empty X-Git-Tag: v197~99 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=b08121d00467874ac9aa0dc6f59787877f1bb427;hp=81dc4bde12acd0a59ad96a505dbb109a9e4f320e systemctl: don't show cgroup field for a unit if cgroup is empty --- diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index 437d09711..2b79f370f 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -335,7 +335,7 @@ int show_cgroup_and_extra(const char *controller, const char *path, const char * int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) { int r; - char *controller, *path; + _cleanup_free_ char *controller = NULL, *path = NULL; assert(spec); @@ -343,9 +343,5 @@ int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned if (r < 0) return r; - r = show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids); - free(controller); - free(path); - - return r; + return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids); } diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index b0d378de5..18cbf0412 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -934,6 +934,20 @@ int cg_is_empty(const char *controller, const char *path, bool ignore_self) { return !found; } +int cg_is_empty_by_spec(const char *spec, bool ignore_self) { + int r; + _cleanup_free_ char *controller = NULL, *path = NULL; + + assert(spec); + + r = cg_split_spec(spec, &controller, &path); + if (r < 0) + return r; + + return cg_is_empty(controller, path, ignore_self); +} + + int cg_is_empty_recursive(const char *controller, const char *path, bool ignore_self) { int r; DIR *d = NULL; diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h index 697669deb..af2efc39b 100644 --- a/src/shared/cgroup-util.h +++ b/src/shared/cgroup-util.h @@ -65,6 +65,7 @@ int cg_set_task_access(const char *controller, const char *path, mode_t mode, ui int cg_install_release_agent(const char *controller, const char *agent); int cg_is_empty(const char *controller, const char *path, bool ignore_self); +int cg_is_empty_by_spec(const char *spec, bool ignore_self); int cg_is_empty_recursive(const char *controller, const char *path, bool ignore_self); int cg_get_user_path(char **path); diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 3abd7dc2e..876e782e7 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -2265,7 +2265,8 @@ static void print_status_info(UnitStatusInfo *i) { if (i->status_text) printf("\t Status: \"%s\"\n", i->status_text); - if (i->default_control_group) { + if (i->default_control_group && + (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_by_spec(i->default_control_group, false) == 0)) { unsigned c; printf("\t CGroup: %s\n", i->default_control_group);