Allow top(1) to toggle display of processes+threads or *only* threads
authorHiten Pandya <hmp@dragonflybsd.org>
Fri, 4 Jun 2004 11:21:53 +0000 (11:21 +0000)
committerHiten Pandya <hmp@dragonflybsd.org>
Fri, 4 Jun 2004 11:21:53 +0000 (11:21 +0000)
by adding a '-O' command line argument and run-time toggle.

This is useful when one wants to only monitor activity of current
active threads.

Document this new functionality and update the patches accordingly.

Requested-by: David Rhodus <drhodus@machdep.com>

contrib/top/patches/commands.c.patch
contrib/top/patches/machine.h.patch
contrib/top/patches/top.X.patch
contrib/top/patches/top.c.patch
usr.bin/top/machine.c

index 1848cba..6d2e912 100644 (file)
@@ -1,15 +1,15 @@
-$DragonFly: src/contrib/top/patches/Attic/commands.c.patch,v 1.1 2004/05/29 05:11:15 hmp Exp $
-Index: contrib/top/commands.c
+Index: commands.c
 ===================================================================
 RCS file: /cvs/DragonFly/src/contrib/top/commands.c,v
 retrieving revision 1.2
 diff -u -p -u -r1.2 commands.c
---- contrib/top/commands.c     17 Jun 2003 04:24:07 -0000      1.2
-+++ contrib/top/commands.c     29 May 2004 01:14:21 -0000
-@@ -73,11 +73,13 @@ d       - change number of displays to s
+--- commands.c 17 Jun 2003 04:24:07 -0000      1.2
++++ commands.c 4 Jun 2004 11:37:12 -0000
+@@ -73,11 +73,14 @@ d       - change number of displays to s
  e       - list errors generated by last \"kill\" or \"renice\" command\n\
  i       - toggle the displaying of idle processes\n\
  I       - same as 'i'\n\
++O     - only display threads\n\
 +T     - toggle the displaying of threads\n\
 +S     - toggle the displaying of system processes\n\
  k       - kill processes; send a signal to a list of processes\n\
index f60ddfa..ba52bd4 100644 (file)
@@ -1,16 +1,16 @@
-$DragonFly: src/contrib/top/patches/Attic/machine.h.patch,v 1.1 2004/05/29 05:11:15 hmp Exp $
-Index: contrib/top/machine.h
+Index: machine.h
 ===================================================================
 RCS file: /cvs/DragonFly/src/contrib/top/machine.h,v
 retrieving revision 1.2
 diff -u -p -u -r1.2 machine.h
---- contrib/top/machine.h      17 Jun 2003 04:24:07 -0000      1.2
-+++ contrib/top/machine.h      28 May 2004 00:39:30 -0000
-@@ -60,6 +60,7 @@ struct process_select
+--- machine.h  17 Jun 2003 04:24:07 -0000      1.2
++++ machine.h  4 Jun 2004 11:46:13 -0000
+@@ -60,6 +60,8 @@ struct process_select
      int idle;         /* show idle processes */
      int self;         /* show self */
      int system;               /* show system processes */
 +    int threads;      /* show threads */
++      int only_threads;       /* show only threads */
      int uid;          /* only this uid (unless uid == -1) */
      char *command;    /* only this command (unless == NULL) */
  };
index 52ddb54..e698f62 100644 (file)
@@ -1,12 +1,11 @@
-$DragonFly: src/contrib/top/patches/Attic/top.X.patch,v 1.1 2004/05/29 05:11:15 hmp Exp $
-Index: contrib/top/top.X
+Index: top.X
 ===================================================================
-RCS file: /cvs/src/contrib/top/top.X,v
+RCS file: /cvs/DragonFly/src/contrib/top/top.X,v
 retrieving revision 1.2
-diff -p -u -r1.2 top.X
---- contrib/top/top.X  17 Jun 2003 04:24:07 -0000      1.2
-+++ contrib/top/top.X  29 May 2004 04:39:35 -0000
-@@ -65,6 +65,11 @@ terminal.
+diff -u -p -u -r1.2 top.X
+--- top.X      17 Jun 2003 04:24:07 -0000      1.2
++++ top.X      4 Jun 2004 12:16:39 -0000
+@@ -65,6 +65,14 @@ terminal.
  Show system processes in the display.  Normally, system processes such as
  the pager and the swapper are not shown.  This option makes them visible.
  .TP
@@ -14,11 +13,14 @@ diff -p -u -r1.2 top.X
 +Show kernel threads in the display.  Normally, kernel threads such as
 +the pagedaemon and bufdaemon are not shown.  This option makes them
 +visible.
++.TP
++.B \-O
++Show only kernel threads.
 +.TP
  .B \-b
  Use \*(lqbatch\*(rq mode.  In this mode, all input from the terminal is
  ignored.  Interrupt characters (such as ^C and ^\e) still have an effect.
-@@ -203,6 +208,12 @@ Redraw the screen.
+@@ -203,6 +211,15 @@ Redraw the screen.
  Display a summary of the commands (help screen).  Version information
  is included in this display.
  .TP
@@ -27,6 +29,9 @@ diff -p -u -r1.2 top.X
 +.TP
 +.B T
 +Display kernel threads, such as bufdaemon and pagedaemon.
++.TP
++.B O
++Toggle displaying of only kernel threads.
 +.TP
  .B q
  Quit
index 11c794b..2c293bd 100644 (file)
@@ -1,64 +1,69 @@
-$DragonFly: src/contrib/top/patches/Attic/top.c.patch,v 1.1 2004/05/29 05:11:15 hmp Exp $
-Index: contrib/top/top.c
+Index: top.c
 ===================================================================
 RCS file: /cvs/DragonFly/src/contrib/top/top.c,v
 retrieving revision 1.2
 diff -u -p -u -r1.2 top.c
---- contrib/top/top.c  17 Jun 2003 04:24:07 -0000      1.2
-+++ contrib/top/top.c  29 May 2004 01:02:10 -0000
+--- top.c      17 Jun 2003 04:24:07 -0000      1.2
++++ top.c      4 Jun 2004 12:09:22 -0000
 @@ -193,9 +193,9 @@ char *argv[];
      fd_set readfds;
  
  #ifdef ORDER
 -    static char command_chars[] = "\f qh?en#sdkriIuto";
-+    static char command_chars[] = "\f qh?en#sdkriIutTSo";
++    static char command_chars[] = "\f qh?en#sdkriIutTOSo";
  #else
 -    static char command_chars[] = "\f qh?en#sdkriIut";
-+    static char command_chars[] = "\f qh?en#sdkriIutTS";
++    static char command_chars[] = "\f qh?en#sdkriIutTOSO";
  #endif
  /* these defines enumerate the "strchr"s of the commands in command_chars */
  #define CMD_redraw    0
-@@ -215,8 +215,10 @@ char *argv[];
+@@ -215,8 +215,11 @@ char *argv[];
  #define CMD_idletog2    13
  #define CMD_user      14
  #define CMD_selftog   15
 +#define CMD_threads   16
-+#define CMD_system    17
++#define CMD_othreads  17
++#define CMD_system    18
  #ifdef ORDER
 -#define CMD_order       16
-+#define CMD_order       18
++#define CMD_order       19
  #endif
  
      /* set the buffer for stdout */
-@@ -245,6 +247,7 @@ char *argv[];
+@@ -245,6 +248,8 @@ char *argv[];
      ps.idle    = Yes;
      ps.self    = -1;
      ps.system  = No;
 +    ps.threads = No;
++      ps.only_threads = No;
      ps.uid     = -1;
      ps.command = NULL;
  
-@@ -271,7 +274,7 @@ char *argv[];
+@@ -271,7 +276,7 @@ char *argv[];
            optind = 1;
        }
  
 -      while ((i = getopt(ac, av, "SIbinquvs:d:U:o:t")) != EOF)
-+      while ((i = getopt(ac, av, "SITNbinquvs:d:U:o:t")) != EOF)
++      while ((i = getopt(ac, av, "SITONbinquvs:d:U:o:t")) != EOF)
        {
            switch(i)
            {
-@@ -300,6 +303,10 @@ char *argv[];
-             case 'I':                   /* show idle processes */
+@@ -301,6 +306,14 @@ char *argv[];
                ps.idle = !ps.idle;
                break;
++                case 'O':
++              ps.only_threads = !ps.only_threads; /* only threads */
++              break;
 +      
 +            case 'T':
 +              ps.threads = !ps.threads;       /* show threads */
-+              break;
++          break;
++
              case 'i':                 /* go interactive regardless */
                interactive = Yes;
-@@ -928,6 +935,22 @@ restart:
+               break;
+@@ -928,6 +941,31 @@ restart:
                                putchar('\r');
                                break;
  
@@ -70,6 +75,15 @@ diff -u -p -u -r1.2 top.c
 +                              putchar('\r');
 +                              break;
 +
++                              case CMD_othreads:
++                                      ps.only_threads = !ps.only_threads;
++                                      new_message(MT_standout | MT_delayed,
++                                      ps.only_threads ?
++                                        "Only displaying threads." :
++                                        "Displaying threads and processes.");
++                              putchar('\r');
++                              break;
++
 +                          case CMD_system:
 +                              ps.system = !ps.system;
 +                              new_message(MT_standout | MT_delayed,
index 0428c11..e9028dd 100644 (file)
@@ -21,7 +21,7 @@
  *          Hiten Pandya <hmp@backplane.com>
  *
  * $FreeBSD: src/usr.bin/top/machine.c,v 1.29.2.2 2001/07/31 20:27:05 tmm Exp $
- * $DragonFly: src/usr.bin/top/machine.c,v 1.11 2004/05/29 05:11:15 hmp Exp $
+ * $DragonFly: src/usr.bin/top/machine.c,v 1.12 2004/06/04 11:21:53 hmp Exp $
  */
 
 
@@ -471,6 +471,7 @@ caddr_t get_process_info(struct system_info *si, struct process_select *sel,
     int show_idle;
     int show_self;
     int show_system;
+    int show_only_threads;
     int show_uid;
     int show_command;
 
@@ -491,6 +492,7 @@ caddr_t get_process_info(struct system_info *si, struct process_select *sel,
     show_self = sel->self;
     show_system = sel->system;
     show_threads = sel->threads;
+    show_only_threads = sel->only_threads;
     show_uid = sel->uid != -1;
     show_command = sel->command != NULL;
 
@@ -508,17 +510,17 @@ caddr_t get_process_info(struct system_info *si, struct process_select *sel,
         *  processes---these get ignored unless show_sysprocs is set.
         */
        if ((show_threads && (TP(pp, td_proc) == NULL)) ||
-           PP(pp, p_stat) != 0 &&
+           (!show_only_threads && (PP(pp, p_stat) != 0 &&
            (show_self != PP(pp, p_pid)) &&
-           (show_system || ((PP(pp, p_flag) & P_SYSTEM) == 0)))
+           (show_system || ((PP(pp, p_flag) & P_SYSTEM) == 0)))))
        {
            total_procs++;
            process_states[(unsigned char) PP(pp, p_stat)]++;
            if ((show_threads && (TP(pp, td_proc) == NULL)) ||
-               (PP(pp, p_stat) != SZOMB) &&
+               (!show_only_threads && (PP(pp, p_stat) != SZOMB) &&
                (show_idle || (PP(pp, p_pctcpu) != 0) ||
                 (PP(pp, p_stat) == SRUN)) &&
-               (!show_uid || EP(pp, e_ucred.cr_ruid) == (uid_t)sel->uid))
+               (!show_uid || EP(pp, e_ucred.cr_ruid) == (uid_t)sel->uid)))
            {
                *prefp++ = pp;
                active_procs++;