summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/systemd-cgtop.xml8
-rw-r--r--src/cgtop/cgtop.c16
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;