From 9d12709626bccc0cae677a7035f62efe6aabb4ab Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 11 Jul 2013 19:14:38 +0200 Subject: [PATCH 1/1] loginctl: suppress cgroup tree output if cgroup is empty same for machinectl --- src/login/loginctl.c | 17 ++++++++++++----- src/machine/machinectl.c | 13 ++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 93f4beed3..736db6a11 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -35,8 +35,9 @@ #include "build.h" #include "strv.h" #include "unit-name.h" -#include "cgroup-show.h" #include "sysfs-show.h" +#include "cgroup-show.h" +#include "cgroup-util.h" #include "spawn-polkit-agent.h" static char **arg_property = NULL; @@ -262,7 +263,7 @@ static int list_seats(DBusConnection *bus, char **args, unsigned n) { return 0; } -static int show_unit_cgroup(DBusConnection *bus, const char *interface, const char *unit) { +static int show_unit_cgroup(DBusConnection *bus, const char *interface, const char *unit, pid_t leader) { const char *property = "ControlGroup"; _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; _cleanup_free_ char *path = NULL; @@ -313,6 +314,12 @@ static int show_unit_cgroup(DBusConnection *bus, const char *interface, const ch dbus_message_iter_get_basic(&sub, &cgroup); + if (isempty(cgroup)) + return 0; + + if (cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, cgroup, false) != 0 && leader <= 0) + return 0; + output_flags = arg_all * OUTPUT_SHOW_ALL | arg_full * OUTPUT_FULL_WIDTH; @@ -323,7 +330,7 @@ static int show_unit_cgroup(DBusConnection *bus, const char *interface, const ch else c = 0; - show_cgroup_by_path(cgroup, "\t\t ", c, false, output_flags); + show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, cgroup, "\t\t ", c, false, &leader, leader > 0, output_flags); return 0; } @@ -441,7 +448,7 @@ static void print_session_status_info(DBusConnection *bus, SessionStatusInfo *i) if (i->scope) { printf("\t Unit: %s\n", i->scope); - show_unit_cgroup(bus, "org.freedesktop.systemd1.Scope", i->scope); + show_unit_cgroup(bus, "org.freedesktop.systemd1.Scope", i->scope, i->leader); } } @@ -483,7 +490,7 @@ static void print_user_status_info(DBusConnection *bus, UserStatusInfo *i) { if (i->slice) { printf("\t Unit: %s\n", i->slice); - show_unit_cgroup(bus, "org.freedesktop.systemd1.Slice", i->slice); + show_unit_cgroup(bus, "org.freedesktop.systemd1.Slice", i->slice, 0); } } diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index cd640e76a..97c219355 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -36,6 +36,7 @@ #include "strv.h" #include "unit-name.h" #include "cgroup-show.h" +#include "cgroup-util.h" #include "spawn-polkit-agent.h" static char **arg_property = NULL; @@ -125,7 +126,7 @@ static int list_machines(DBusConnection *bus, char **args, unsigned n) { return 0; } -static int show_scope_cgroup(DBusConnection *bus, const char *unit) { +static int show_scope_cgroup(DBusConnection *bus, const char *unit, pid_t leader) { const char *interface = "org.freedesktop.systemd1.Scope"; const char *property = "ControlGroup"; _cleanup_dbus_message_unref_ DBusMessage *reply = NULL; @@ -177,6 +178,12 @@ static int show_scope_cgroup(DBusConnection *bus, const char *unit) { dbus_message_iter_get_basic(&sub, &cgroup); + if (isempty(cgroup)) + return 0; + + if (cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, cgroup, false) != 0 && leader <= 0) + return 0; + output_flags = arg_all * OUTPUT_SHOW_ALL | arg_full * OUTPUT_FULL_WIDTH; @@ -187,7 +194,7 @@ static int show_scope_cgroup(DBusConnection *bus, const char *unit) { else c = 0; - show_cgroup_by_path(cgroup, "\t\t ", c, false, output_flags); + show_cgroup_and_extra(SYSTEMD_CGROUP_CONTROLLER, cgroup, "\t\t ", c, false, &leader, leader > 0, output_flags); return 0; } @@ -249,7 +256,7 @@ static void print_machine_status_info(DBusConnection *bus, MachineStatusInfo *i) if (i->scope) { printf("\t Unit: %s\n", i->scope); - show_scope_cgroup(bus, i->scope); + show_scope_cgroup(bus, i->scope, i->leader); } } -- 2.30.2