diff options
-rw-r--r-- | man/systemd-cgtop.xml | 8 | ||||
-rw-r--r-- | src/cgtop/cgtop.c | 16 |
2 files changed, 22 insertions, 2 deletions
diff --git a/man/systemd-cgtop.xml b/man/systemd-cgtop.xml index e4bc22f278..14b503c3da 100644 --- a/man/systemd-cgtop.xml +++ b/man/systemd-cgtop.xml @@ -169,6 +169,14 @@ </varlistentry> <varlistentry> + <term><option>-k</option></term> + + <listitem><para>Include kernel threads when counting tasks in + control groups. By default, kernel threads are not included in + the count.</para></listitem> + </varlistentry> + + <varlistentry> <term><option>-n</option></term> <term><option>--iterations=</option></term> diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index 9e771d821b..720af66fd2 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -30,6 +30,7 @@ #include "path-util.h" #include "terminal-util.h" +#include "process-util.h" #include "util.h" #include "hashmap.h" #include "cgroup-util.h" @@ -64,6 +65,7 @@ static unsigned arg_iterations = (unsigned) -1; static bool arg_batch = false; static bool arg_raw = false; static usec_t arg_delay = 1*USEC_PER_SEC; +static bool arg_kernel_threads = false; static enum { ORDER_PATH, @@ -154,8 +156,13 @@ static int process(const char *controller, const char *path, Hashmap *a, Hashmap return r; g->n_tasks = 0; - while (cg_read_pid(f, &pid) > 0) + while (cg_read_pid(f, &pid) > 0) { + + if (!arg_kernel_threads && is_kernel_thread(pid) > 0) + continue; + g->n_tasks++; + } if (g->n_tasks > 0) g->n_tasks_valid = true; @@ -565,6 +572,7 @@ static void help(void) { " -r --raw Provide raw (not human-readable) numbers\n" " --cpu=percentage Show CPU usage as percentage (default)\n" " --cpu=time Show CPU usage as time\n" + " -k Include kernel threads in task count\n" " -d --delay=DELAY Delay between updates\n" " -n --iterations=N Run for N iterations before exiting\n" " -b --batch Run in batch mode, accepting no input\n" @@ -600,7 +608,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 1); assert(argv); - while ((c = getopt_long(argc, argv, "hptcmin:brd:", options, NULL)) >= 0) + while ((c = getopt_long(argc, argv, "hptcmin:brd:k", options, NULL)) >= 0) switch (c) { @@ -700,6 +708,10 @@ static int parse_argv(int argc, char *argv[]) { } break; + case 'k': + arg_kernel_threads = true; + break; + case '?': return -EINVAL; |