Show only details for the active task on each cpu: PID PPID CPU TASK ST %MEM VSZ RSS COMM > 79992 1 3 ffff882456ef6ab0 RU 0.0 42194276 32620 oracle > 80471 1 0 ffff886b080e0ab0 RU 0.0 42194276 36912 oracle > 86772 85179 2 ffff8811a8650040 RU 0.0 4072 588 fstab_import > 88643 1 1 ffff88069366a040 RU 0.0 42231192 55628 oracle The -A flag is mutually-exclusive in addition to: -a, -t, -c, -p, -g, -l, -m, -S and -r. Signed-off-by: Aaron Tomlin <atomlin@xxxxxxxxxx> --- defs.h | 3 ++- help.c | 11 ++++++++++- task.c | 14 +++++++++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/defs.h b/defs.h index 4d2fb2f..76827dc 100644 --- a/defs.h +++ b/defs.h @@ -4625,8 +4625,9 @@ extern long _ZOMBIE_; #define PS_MSECS (0x20000) #define PS_SUMMARY (0x40000) #define PS_POLICY (0x80000) +#define PS_ACTIVE (0x100000) -#define PS_EXCLUSIVE (PS_TGID_LIST|PS_ARGV_ENVP|PS_TIMES|PS_CHILD_LIST|PS_PPID_LIST|PS_LAST_RUN|PS_RLIMIT|PS_MSECS|PS_SUMMARY) +#define PS_EXCLUSIVE (PS_TGID_LIST|PS_ARGV_ENVP|PS_TIMES|PS_CHILD_LIST|PS_PPID_LIST|PS_LAST_RUN|PS_RLIMIT|PS_MSECS|PS_SUMMARY|PS_ACTIVE) #define MAX_PS_ARGS (100) /* maximum command-line specific requests */ diff --git a/help.c b/help.c index 5b04b09..760fcb0 100644 --- a/help.c +++ b/help.c @@ -1251,7 +1251,7 @@ NULL char *help_ps[] = { "ps", "display process status information", -"[-k|-u|-G|-y policy] [-s] [-p|-c|-t|-[l|m][-C cpu]|-a|-g|-r|-S]\n [pid | task | command] ...", +"[-k|-u|-G|-y policy] [-s] [-p|-c|-t|-[l|m][-C cpu]|-a|-g|-r|-S|-A]\n [pid | task | command] ...", " This command displays process status for selected, or all, processes" , " in the system. If no arguments are entered, the process data is", " is displayed for all processes. Specific processes may be selected", @@ -1329,6 +1329,7 @@ char *help_ps[] = { " -g display tasks by thread group, of selected, or all, tasks.", " -r display resource limits (rlimits) of selected, or all, tasks.", " -S display a summary consisting of the number of tasks in a task state.", +" -A display only the active task, on each cpu.", "\nEXAMPLES", " Show the process status of all current tasks:\n", " %s> ps", @@ -1483,6 +1484,14 @@ char *help_ps[] = { " UN: 31", " ZO: 1", " ", +" Display only the active task, on each cpu:\n", +" %s> ps -A", +" PID PPID CPU TASK ST %MEM VSZ RSS COMM", +" > 10 2 1 ffff880212969710 IN 0.0 0 0 [migration/1]", +" > 0 0 3 ffff884026d43520 RU 0.0 0 0 [swapper]", +" > 6582 1 2 ffff880f49c52040 RU 0.0 42202472 33368 oracle", +" > 9497 1 0 ffff880549ec2ab0 RU 0.0 42314692 138664 oracle", +" ", " Show all tasks sorted by their task_struct's last_run, timestamp, or", " sched_entity last_arrival timestamp value, whichever applies:\n", " %s> ps -l", diff --git a/task.c b/task.c index db05ab4..be3b4f0 100644 --- a/task.c +++ b/task.c @@ -3240,7 +3240,7 @@ parse_task_thread(int argcnt, char *arglist[], struct task_context *tc) { } static char *ps_exclusive = - "-a, -t, -c, -p, -g, -l, -m, -S and -r flags are all mutually-exclusive\n"; + "-a, -t, -c, -p, -g, -l, -m, -S, -r and -A flags are all mutually-exclusive\n"; static void check_ps_exclusive(ulong flag, ulong thisflag) @@ -3267,7 +3267,7 @@ cmd_ps(void) cpuspec = NULL; flag = 0; - while ((c = getopt(argcnt, args, "SgstcpkuGlmarC:y:")) != EOF) { + while ((c = getopt(argcnt, args, "ASgstcpkuGlmarC:y:")) != EOF) { switch(c) { case 'k': @@ -3372,6 +3372,10 @@ cmd_ps(void) flag |= PS_POLICY; psinfo.policy = make_sched_policy(optarg); break; + case 'A': + check_ps_exclusive(flag, PS_ACTIVE); + flag |= PS_ACTIVE; + break; default: argerrs++; @@ -3576,6 +3580,10 @@ show_ps_data(ulong flag, struct task_context *tc, struct psinfo *psi) task_active = is_task_active(tc->task); + if ((flag & PS_ACTIVE) && (flag & PS_SHOW_ALL) && + !task_active) + return; + if (task_active) { if (hide_offline_cpu(tc->processor)) fprintf(fp, "- "); @@ -3610,7 +3618,7 @@ show_ps(ulong flag, struct psinfo *psi) int print; char buf[BUFSIZE]; - if (!(flag & (PS_EXCLUSIVE|PS_NO_HEADER))) + if (!(flag & ((PS_EXCLUSIVE & ~PS_ACTIVE)|PS_NO_HEADER))) fprintf(fp, " PID PPID CPU %s ST %%MEM VSZ RSS COMM\n", flag & PS_KSTACKP ? -- 2.14.3 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility