summaryrefslogtreecommitdiff
path: root/src/cgtop/cgtop.c
diff options
context:
space:
mode:
authorAlessandro Puccetti <alessandro@kinvolk.io>2016-06-05 19:42:37 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2016-06-05 13:42:37 -0400
commit308253c5a2b146fc18e3789725c092ac55b10ce7 (patch)
treea502c97b93a226b425c1e273479df1de7152ba73 /src/cgtop/cgtop.c
parent0a62f81045dd810c8f1223cccbac4d706ea2cb45 (diff)
cgtop: add option to show a single cgroup subtree (#3413)
When many services are running, it was difficult to see only the interesting ones. This patch allows to show only the subtree of interest.
Diffstat (limited to 'src/cgtop/cgtop.c')
-rw-r--r--src/cgtop/cgtop.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index 33379eb9bd..b4a982ce38 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -72,6 +72,7 @@ static bool arg_batch = false;
static bool arg_raw = false;
static usec_t arg_delay = 1*USEC_PER_SEC;
static char* arg_machine = NULL;
+static char* arg_root = NULL;
static bool arg_recursive = true;
static enum {
@@ -653,7 +654,7 @@ static void display(Hashmap *a) {
}
static void help(void) {
- printf("%s [OPTIONS...]\n\n"
+ printf("%s [OPTIONS...] [CGROUP]\n\n"
"Show top control groups by their resource usage.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
@@ -835,7 +836,13 @@ static int parse_argv(int argc, char *argv[]) {
assert_not_reached("Unhandled option");
}
- if (optind < argc) {
+ if (optind == argc-1) {
+ if (arg_machine) {
+ log_error("Specifying a control group path together with the -M option is not allowed");
+ return -EINVAL;
+ }
+ arg_root = argv[optind];
+ } else if (optind < argc) {
log_error("Too many arguments.");
return -EINVAL;
}
@@ -864,6 +871,13 @@ static int get_cgroup_root(char **ret) {
const char *m;
int r;
+ if (arg_root) {
+ *ret = strdup(arg_root);
+ if (!*ret)
+ return log_oom();
+ return 0;
+ }
+
if (!arg_machine) {
r = cg_get_root_path(ret);
if (r < 0)