cgtop: ignore kernel threads when counting tasks

However, allow them to be counted in by specifying -k
This commit is contained in:
Lennart Poettering 2015-08-28 19:31:07 +02:00
parent cb88a0a4ae
commit 41ba8b6e69
2 changed files with 22 additions and 2 deletions

View file

@ -168,6 +168,14 @@
percentage.</para></listitem>
</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>

View file

@ -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;