Author: eadler
Date: Sat Jun  9 23:08:02 2018
New Revision: 334901
URL: https://svnweb.freebsd.org/changeset/base/334901

Log:
  top(1): handle specific pids better
  
  When told to watch a specific pid, don't filter idle, system, or self
  processes. The summary at the top will still flip correctly though.

Modified:
  head/usr.bin/top/machine.c
  head/usr.bin/top/top.c

Modified: head/usr.bin/top/machine.c
==============================================================================
--- head/usr.bin/top/machine.c  Sat Jun  9 23:07:32 2018        (r334900)
+++ head/usr.bin/top/machine.c  Sat Jun  9 23:08:02 2018        (r334901)
@@ -841,11 +841,11 @@ get_process_info(struct system_info *si, struct proces
                        /* not in use */
                        continue;
 
-               if (!sel->self && pp->ki_pid == mypid)
+               if (!sel->self && pp->ki_pid == mypid && sel->pid == -1)
                        /* skip self */
                        continue;
 
-               if (!sel->system && (pp->ki_flag & P_SYSTEM))
+               if (!sel->system && (pp->ki_flag & P_SYSTEM) && sel->pid == -1)
                        /* skip system process */
                        continue;
 
@@ -861,7 +861,7 @@ get_process_info(struct system_info *si, struct proces
                        /* skip zombies */
                        continue;
 
-               if (!sel->kidle && pp->ki_tdflags & TDF_IDLETD)
+               if (!sel->kidle && pp->ki_tdflags & TDF_IDLETD && sel->pid == 
-1)
                        /* skip kernel idle process */
                        continue;
 

Modified: head/usr.bin/top/top.c
==============================================================================
--- head/usr.bin/top/top.c      Sat Jun  9 23:07:32 2018        (r334900)
+++ head/usr.bin/top/top.c      Sat Jun  9 23:08:02 2018        (r334901)
@@ -259,7 +259,6 @@ main(int argc, char *argv[])
     char *order_name = NULL;
     int order_index = 0;
     fd_set readfds;
-    char old_system = false;
 
     static const char command_chars[] = "\f qh?en#sdkriIutHmSCajzPJwopT";
 /* these defines enumerate the "strchr"s of the commands in command_chars */
@@ -381,7 +380,6 @@ _Static_assert(sizeof(command_chars) == CMD_toggletid 
 
              case 'S':                 /* show system processes */
                ps.system = true;
-               old_system = true;
                break;
 
              case 'I':                   /* show idle processes */
@@ -1086,7 +1084,6 @@ restart:
                                break;
                            case CMD_viewsys:
                                ps.system = !ps.system;
-                               old_system = ps.system;
                                break;
                            case CMD_showargs:
                                fmt_flags ^= FMT_SHOWARGS;
@@ -1193,7 +1190,6 @@ restart:
                                        if (tempbuf2[0] == '+' &&
                                            tempbuf2[1] == '\0') {
                                                ps.pid = (pid_t)-1;
-                                               ps.system = old_system;
                                        } else {
                                                unsigned long long num;
                                                const char *errstr;
@@ -1206,10 +1202,7 @@ restart:
                                                                tempbuf2);
                                                        no_command = true;
                                                } else {
-                                                       if (ps.system == false)
-                                                               old_system = 
false;
                                                        ps.pid = (pid_t)num;
-                                                       ps.system = true;
                                                }
                                        }
                                        putchar('\r');
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to