]> granicus.if.org Git - procps-ng/commitdiff
misc
authoralbert <>
Wed, 30 Oct 2002 06:06:44 +0000 (06:06 +0000)
committeralbert <>
Wed, 30 Oct 2002 06:06:44 +0000 (06:06 +0000)
README.top
top.1
top.c
top.h

index 87e33ed7c725953a7acb1de497cdd4910e734320..74baf95e43c3ff1bc29f450d7a050fc735ec6ca9 100644 (file)
@@ -52,7 +52,6 @@ separate CPUs, but could easily be changed.
 //#define PRETENDNOCAP            /* use a terminal without essential caps   */
 //#define SORT_SUPRESS            /* *attempt* to reduce qsort overhead      */
 //#define USE_LIB_STA3            /* use lib status (3 ch) vs. proc_t (1 ch) */
-//#define YIELDCPU_OFF            /* hang on tight, DON'T issue sched_yield  */
 //#define WARN_NOT_SMP            /* restrict '1' & 'I' commands to true smp */
 
 
diff --git a/top.1 b/top.1
index 1a052528c828410906f3af110c57ee1228463c79..13069df4997cb01164d827f750caaea00b6cf6e4 100644 (file)
--- a/top.1
+++ b/top.1
@@ -185,11 +185,11 @@ Even so, items shown with an \*(AS could be overridden through the
 command-line.
 
     \fIGlobal_defaults\fR
-       'A' - Alt display        \fBOff\fR (full-screen)
+       'A' - Alt display        Off (full-screen)
      * 'd' - Delay time         3.0 seconds
        'I' - Irix mode          On\ \ (no, 'solaris' smp)
-     * 'p' - PID monitoring     \fBOff\fR
-     * 's' - Secure mode        \fBOff\fR (unsecured)
+     * 'p' - PID monitoring     Off
+     * 's' - Secure mode        Off (unsecured)
     \fISummary_Area_defaults\fR
        'l' - Load Avg/Uptime    On\ \ (thus program name)
        't' - Task/Cpu state     On\ \ (1+1 lines, see '1')
@@ -197,13 +197,13 @@ command-line.
        '1' - Single Cpu         On\ \ (thus 1 line if smp)
     \fITask_Area_defaults\fR
        'b' - Bold hilite        On\ \ (not 'reverse')
-     * 'c' - Command line       \fBOff\fR (name, not cmdline)
+     * 'c' - Command line       Off (name, not cmdline)
      * 'i' - Idle tasks         On\ \ (show all tasks)
        'R' - Reverse sort       On\ \ (sort pids high-to-low)
-     * 'S' - Cumulative time    \fBOff\fR (exclude dead children)
-       'x' - Column hilite      \fBOff\fR\ (no, sort field)
+     * 'S' - Cumulative time    Off (exclude dead children)
+       'x' - Column hilite      Off\ (no, sort field)
        'y' - Row hilite         On\ \ (yes, running tasks)
-       'z' - color/mono         \fBOff\fR\ (no, colors)
+       'z' - color/mono         Off\ (no, colors)
 
 
 .\" ----------------------------------------------------------------------
@@ -876,7 +876,7 @@ in all four windows before returning to the \*(Me display.
         <Enter>   :apply and exit
         'q'       :abandon current changes and exit
 
-\*(NT If your use 'a' or 'w' to cycle the targeted window, you will
+If your use 'a' or 'w' to cycle the targeted window, you will
 have applied the color scheme that was displayed when you left that window.
 You can, of course, easily return to any window and reapply different
 colors or turn colors \*F completely with the 'z' toggle.
@@ -898,7 +898,6 @@ as you return to the \*(Me display.
 In \*(FM there is a single window represented by the entire screen.
 That single window can still be changed to display 1 of 4 different\fB field
 groups\fR (\*(Xc 'G' \*(CI, repeated below).
-
 Each of the 4 field groups has a unique separately configurable\fB \*(SA\fR
 and its own configurable\fB \*(TA\fR.
 
@@ -927,13 +926,13 @@ know what window is the \*(CW.
 .SS 4b. COMMANDS for Windows
 .TP 7
 \ \ \'\fB-\fR\' and \'\fB_\fR\' :\fIShow/Hide_Window(s)_toggles\fR
-The '-' (minus) key turns the \*(CW's \*(TD \*O and \*F.
+The '-' key turns the \*(CW's \*(TD \*O and \*F.
 When \*O, that \*(TA will show a minimum of the columns header you've
 established with the 'f' and 'o' commands.
 It will also reflect any other \*(TA options/toggles you've applied yielding
 zero or more tasks.
 
-The '_' (upper case minus) key does the same for all \*(TDs.
+The '_' key does the same for all \*(TDs.
 In other words, it switches between the currently visible \*(TD(s) and any
 \*(TD(s) you had toggled \*F.
 If all 4 \*(TDs are currently visible, this \*(CI will leave the \*(SA
@@ -941,11 +940,11 @@ as the only display element.
 
 .TP 7
 *\ \'\fB=\fR\' and \'\fB+\fR\' :\fIEqualize_(re-balance)_Window(s)\fR
-The '=' (equals) key forces the \*(CW's \*(TD to be visible.
+The '=' key forces the \*(CW's \*(TD to be visible.
 It also reverses any 'i' (idle tasks) and 'n' (max tasks) commands that might
 be active.
 
-The \'+' (upper case equals) key does the same for all windows.
+The '+' key does the same for all windows.
 The four \*(TDs will reappear, nice and even.  They will also have retained
 any customizations you had previously applied, except for the 'i'
 (idle tasks) and 'n' (max tasks) commands.
@@ -1016,8 +1015,8 @@ Here is an example of the contents of\fI /etc/toprc\fR:
 
 .\" ......................................................................
 .SS 5b. PERSONAL Configuration File
-This file, written as '$HOME/.your-name-4-top' + 'rc'.
-You use the 'W' \*(CI to create it or update it.
+This file is written as '$HOME/.your-name-4-top' + 'rc'.
+Use the 'W' \*(CI to create it or update it.
 
 Here is the general layout:
    global    # line 1: the program name/alias notation
@@ -1078,22 +1077,19 @@ For these stupid tricks, \*(Me needs \*(AM.
 
 .New
 With 3 or 4 \*(TDs visible, pick any window other than the last
-and turn idle processes \*F.  
-
+and turn idle processes \*F.
 Depending on where you applied 'i', sometimes several \*(TDs are bouncing and
 sometimes it's like an accordion, as \*(Me tries his best to allocate space.
 
 .New
 Set each window's summary lines differently: one with no memory; another with
-no states; maybe one with nothing at all, just the message line.  
-
-Then hold down 'a' or 'w' and watch a variation on bouncing windows.
-What say we call these 'hopping windows'.
+no states; maybe one with nothing at all, just the message line.
+Then hold down 'a' or 'w' and watch a variation on bouncing windows \*(EM
+hopping windows.
 
 .New
 Display all 4 windows and for each, in turn, set idle processes to \*F.
-
-You've just entered the "extreme bounce" zone.  
+You've just entered the "extreme bounce" zone.
 
 .\" ......................................................................
 .SS 6c. The Big Bird Window
diff --git a/top.c b/top.c
index 83f97544694d9eb89766fa1b2e1ef500b14651d2..a85eee249d60ca4ac2b655502a91d23f5ec55f56 100644 (file)
--- a/top.c
+++ b/top.c
@@ -23,9 +23,6 @@
 #include <ctype.h>
 #include <curses.h>
 #include <errno.h>
-#ifndef YIELDCPU_OFF
-#include <sched.h>
-#endif
 #include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -1147,20 +1144,23 @@ static void whack_terminal (void)
 /*######  Field Selection/Ordering routines  #############################*/
 
         /* These are our gosh darn 'Fields' !
-           They MUST be kept in sync with pflags !! */
+           They MUST be kept in sync with pflags !!
+           note: for integer data, the length modifiers found in .fmts may be
+                 smaller than the true length found in the proc_t -- this plus
+                 a cast in show_a_task provides some width protection. */
 static FTAB_t  Fieldstab[] = {
 /*   head           fmts     width   scale  sort      desc
      -----------    -------  ------  -----  --------  ---------------------- */
-   { "  PID ",      "%5d ",     -1,    -1, _SF(P_PID), "Process Id"           },
-   { " PPID ",      "%5d ",     -1,    -1, _SF(P_PPD), "Parent Process Pid"   },
-   { " PGID ",      "%5d ",     -1,    -1, _SF(P_PGD), "Process Group Id"     },
-   { " UID ",       "%4d ",     -1,    -1, _SF(P_UID), "User Id"              },
+   { "  PID ",      "%5u ",     -1,    -1, _SF(P_PID), "Process Id"           },
+   { " PPID ",      "%5u ",     -1,    -1, _SF(P_PPD), "Parent Process Pid"   },
+   { " PGID ",      "%5u ",     -1,    -1, _SF(P_PGD), "Process Group Id"     },
+   { " UID ",       "%4u ",     -1,    -1, _SF(P_UID), "User Id"              },
    { "USER     ",   "%-8.8s ",  -1,    -1, _SF(P_USR), "User Name"            },
    { "GROUP    ",   "%-8.8s ",  -1,    -1, _SF(P_GRP), "Group Name"           },
    { "TTY      ",   "%-8.8s ",   8,    -1, _SF(P_TTY), "Controlling Tty"      },
-   { " PR ",        "%3ld ",    -1,    -1, _SF(P_PRI), "Priority"             },
-   { " NI ",        "%3ld ",    -1,    -1, _SF(P_NCE), "Nice value"           },
-   { "#C ",         "%2d ",     -1,    -1, _SF(P_CPN), "Last used cpu (SMP)"  },
+   { " PR ",        "%3d ",     -1,    -1, _SF(P_PRI), "Priority"             },
+   { " NI ",        "%3d ",     -1,    -1, _SF(P_NCE), "Nice value"           },
+   { "#C ",         "%2u ",     -1,    -1, _SF(P_CPN), "Last used cpu (SMP)"  },
    { "%CPU ",       "%#4.1f ",  -1,    -1, _SF(P_CPU), "CPU usage"            },
    { "  TIME ",     "%6.6s ",    6,    -1, _SF(P_TME), "CPU Time"             },
    { "   TIME+  ",  "%9.9s ",    9,    -1, _SF(P_TME), "CPU Time, hundredths" },
@@ -1848,24 +1848,24 @@ static void frame_storage (void)
         /*
          * Task display *Helper* function to handle highlighted
          * column transitions.  */
-static void mkcol (WIN_t *q, PFLG_t idx, int sta, int *pad, char *buf, ...)
-{
+static void mkcol (WIN_t *q, int a, int c, int *p, char *b, const char *f, ...)
+{     /* a = status, c = hicol, p = pad, b = buf, f = fmt */
    char tmp[COLBUFSIZ];
    va_list va;
 
-   va_start(va, buf);
+   va_start(va, f);
       /* this conditional is for piece-of-mind only, it should NOT be needed
          given the macro employed by show_a_task (which calls us only when
          the target column is the current sort field and Show_HICOLS is on) */
-   if (!CHKw(q, Show_HICOLS) || q->sortindx != idx) {
-      vsprintf(buf, Fieldstab[idx].fmts, va);
+   if (!c) {
+      vsprintf(b, f, va);
    } else {
-      vsnprintf(tmp, sizeof(tmp), Fieldstab[idx].fmts, va);
-      sprintf(buf, "%s%s", q->capclr_rowhigh, tmp);
-      *pad += q->len_rowhigh;
-      if (!CHKw(q, Show_HIROWS) || 'R' != sta) {
-         strcat(buf, q->capclr_rownorm);
-         *pad += q->len_rownorm;
+      vsnprintf(tmp, sizeof(tmp), f, va);
+      sprintf(b, "%s%s", q->capclr_rowhigh, tmp);
+      *p += q->len_rowhigh;
+      if (!CHKw(q, Show_HIROWS) || 'R' != a) {
+         strcat(b, q->capclr_rownorm);
+         *p += q->len_rownorm;
       }
    }
    va_end(va);
@@ -1878,10 +1878,10 @@ static void show_a_task (WIN_t *q, proc_t *task)
 {
    /* the following macro is our means to 'inline' emitting a column -- that's
       far and away the most frequent and costly part of top's entire job! */
-#define MKCOL(q,idx,sta,pad,buf,arg...) do{ \
-           if (!b) \
-              snprintf(buf, sizeof(buf), f, ## arg); \
-           else mkcol(q, idx, sta, pad, buf, ## arg); }while(0)
+#define MKCOL(q,a,c,p,b,f,v...) do{ \
+           if (!c) \
+              snprintf(b, sizeof(b), f, ## v); \
+           else mkcol(q, a, c, p, b, f, ## v); } while(0)
 
    char rbuf[ROWBUFSIZ];
    int j, x, pad;
@@ -1893,12 +1893,12 @@ static void show_a_task (WIN_t *q, proc_t *task)
 
    for (x = 0; x < q->maxpflgs; x++) {
       char cbuf[COLBUFSIZ];
-      char        a = task->state;              /* we'll use local var's so  */
-      PFLG_t      i = q->procflags[x];          /* gcc doesn't reinvent the  */
-      unsigned    s = Fieldstab[i].scale;       /* wheel -- yields a cryptic */
-      unsigned    w = Fieldstab[i].width;       /* mkcol, but saves +1k code */
-      const char *f = Fieldstab[i].fmts;        /* (this & next macro only) */
-      int         b = (CHKw(q, Show_HICOLS) && q->sortindx == i);
+      char        a = task->state;              /* we'll use local var's so */
+      PFLG_t      i = q->procflags[x];          /* gcc doesn't reinvent the */
+      const char *f = Fieldstab[i].fmts;        /* wheel - yields a cryptic */
+      unsigned    s = Fieldstab[i].scale;       /* mkcol, but saves a bunch */
+      unsigned    w = Fieldstab[i].width;       /* of generated code...     */
+      int         c = (CHKw(q, Show_HICOLS) && q->sortindx == i);
 
       cbuf[0] = '\0';
       switch (i) {
@@ -1930,76 +1930,76 @@ static void show_a_task (WIN_t *q, proc_t *task)
                }
                cmdptr = cmdnam;
             }
-            MKCOL(q, i, a, &pad, cbuf, q->maxcmdln, q->maxcmdln, cmdptr);
+            MKCOL(q, a, c, &pad, cbuf, f, q->maxcmdln, q->maxcmdln, cmdptr);
          }
             break;
          case P_COD:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(PAGES_2K(task->trs), w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(PAGES_2K(task->trs), w, s));
             break;
          case P_CPN:
-            MKCOL(q, i, a, &pad, cbuf, task->processor);
+            MKCOL(q, a, c, &pad, cbuf, f, (unsigned)task->processor);
             break;
          case P_CPU:
          {  float u = (float)task->pcpu * Frame_tscale;
 
             if (99.9 < u) u = 99.9;
-            MKCOL(q, i, a, &pad, cbuf, u);
+            MKCOL(q, a, c, &pad, cbuf, f, u);
          }
             break;
          case P_DAT:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(PAGES_2K(task->drs), w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(PAGES_2K(task->drs), w, s));
             break;
          case P_DRT:
-            MKCOL(q, i, a, &pad, cbuf, scale_num((unsigned)task->dt, w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num((unsigned)task->dt, w, s));
             break;
          case P_FLG:
-            MKCOL(q, i, a, &pad, cbuf, (long)task->flags);
+            MKCOL(q, a, c, &pad, cbuf, f, (long)task->flags);
             for (j = 0; cbuf[j]; j++)
                if ('0' == cbuf[j]) cbuf[j] = '.';
             break;
          case P_FLT:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(task->maj_flt, w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(task->maj_flt, w, s));
             break;
          case P_GRP:
-            MKCOL(q, i, a, &pad, cbuf, task->egroup);
+            MKCOL(q, a, c, &pad, cbuf, f, task->egroup);
             break;
          case P_MEM:
-            MKCOL(q, i, a, &pad, cbuf
+            MKCOL(q, a, c, &pad, cbuf, f
                , (float)PAGES_2K(task->resident) * 100 / kb_main_total);
             break;
          case P_NCE:
-            MKCOL(q, i, a, &pad, cbuf, (long)task->nice);
+            MKCOL(q, a, c, &pad, cbuf, f, (int)task->nice);
             break;
          case P_PGD:
-            MKCOL(q, i, a, &pad, cbuf, task->pgrp);
+            MKCOL(q, a, c, &pad, cbuf, f, (unsigned)task->pgrp);
             break;
          case P_PID:
-            MKCOL(q, i, a, &pad, cbuf, task->pid);
+            MKCOL(q, a, c, &pad, cbuf, f, (unsigned)task->pid);
             break;
          case P_PPD:
-            MKCOL(q, i, a, &pad, cbuf, task->ppid);
+            MKCOL(q, a, c, &pad, cbuf, f, (unsigned)task->ppid);
             break;
          case P_PRI:
-               /* quick & dirty response to 2.5.xx RT priority */
-            if (-99 > task->priority) task->priority = -99;
-            else if (+99 < task->priority) task->priority = +99;
-            MKCOL(q, i, a, &pad, cbuf, (long)task->priority);
+            if (-99 > task->priority || +99 < task->priority)
+               MKCOL(q, a, c, &pad, cbuf, " RT ");
+            else
+               MKCOL(q, a, c, &pad, cbuf, f, (int)task->priority);
             break;
          case P_RES:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(PAGES_2K(task->resident), w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(PAGES_2K(task->resident), w, s));
             break;
          case P_SHR:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(PAGES_2K(task->share), w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(PAGES_2K(task->share), w, s));
             break;
          case P_STA:
 #ifdef USE_LIB_STA3
-            MKCOL(q, i, a, &pad, cbuf, status(task));
+            MKCOL(q, a, c, &pad, cbuf, f, status(task));
 #else
-            MKCOL(q, i, a, &pad, cbuf, task->state);
+            MKCOL(q, a, c, &pad, cbuf, f, task->state);
 #endif
             break;
          case P_SWP:
-            MKCOL(q, i, a, &pad, cbuf
+            MKCOL(q, a, c, &pad, cbuf, f
                , scale_num(PAGES_2K(task->size - task->resident), w, s));
             break;
          case P_TME:
@@ -2009,34 +2009,34 @@ static void show_a_task (WIN_t *q, proc_t *task)
             t = task->utime + task->stime;
             if (CHKw(q, Show_CTIMES))
                t += (task->cutime + task->cstime);
-            MKCOL(q, i, a, &pad, cbuf, scale_tics(t, w));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_tics(t, w));
          }
             break;
          case P_TTY:
          {  char tmp[TNYBUFSIZ];
 
             dev_to_tty(tmp, (int)w, task->tty, task->pid, ABBREV_DEV);
-            MKCOL(q, i, a, &pad, cbuf, tmp);
+            MKCOL(q, a, c, &pad, cbuf, f, tmp);
          }
             break;
          case P_UID:
-            MKCOL(q, i, a, &pad, cbuf, task->euid);
+            MKCOL(q, a, c, &pad, cbuf, f, (unsigned)task->euid);
             break;
          case P_USR:
-            MKCOL(q, i, a, &pad, cbuf, task->euser);
+            MKCOL(q, a, c, &pad, cbuf, f, task->euser);
             break;
          case P_VRT:
-            MKCOL(q, i, a, &pad, cbuf, scale_num(PAGES_2K(task->size), w, s));
+            MKCOL(q, a, c, &pad, cbuf, f, scale_num(PAGES_2K(task->size), w, s));
             break;
          case P_WCH:
             if (No_ksyms) {
 #ifdef CASEUP_HEXES
-               MKCOL(q, i, a, &pad, cbuf, fmtmk("x%08lX", (long)task->wchan));
+               MKCOL(q, a, c, &pad, cbuf, "%08lX  ", (long)task->wchan);
 #else
-               MKCOL(q, i, a, &pad, cbuf, fmtmk("x%08lx", (long)task->wchan));
+               MKCOL(q, a, c, &pad, cbuf, "%08lx  ", (long)task->wchan);
 #endif
             } else {
-               MKCOL(q, i, a, &pad, cbuf, wchan(task->wchan));
+               MKCOL(q, a, c, &pad, cbuf, f, wchan(task->wchan));
             }
             break;
 
@@ -2444,17 +2444,6 @@ static proc_t **do_summary (void)
        ** Display Memory and Swap space usage */
    frame_storage();
 
-#ifndef YIELDCPU_OFF
-   /* jeeze pucker up, it's time to kiss the scheduler's butt...
-
-      Alright Mr. Kernel, that's ENOUGH already.  This swell little program
-      is SICK and TIRED of being PUNISHED for its CAREFUL USE of cpu cycles
-      (quite unlike old top who just threw them away).  You constantly make
-      me FIGHT my way back up the RUN-QUEUE!  Dammit, I am GOOD, regardless
-      of whether your GOODNESS says so.  So here's the deal: I'll yield the
-      darn cpu, if you'll promise to re-dispatch me real soon, ok? */
-   sched_yield();
-#endif
    SETw(Curwin, NEWFRAM_cwo);
    return p_table;
 
diff --git a/top.h b/top.h
index 4c3262fbe8ee2195e3770164036bd480d54533c0..49ee8cca1aa9225adb781027f34ba0bd010f547a 100644 (file)
--- a/top.h
+++ b/top.h
@@ -34,7 +34,6 @@
 //#define PRETEND2_5_X            /* pretend we're linux 2.5.x (for IO-wait) */
 //#define PRETEND4CPUS            /* pretend we're smp with 4 ticsers (sic)  */
 //#define PRETENDNOCAP            /* use a terminal without essential caps   */
-//#define YIELDCPU_OFF            /* hang on tight, DON'T issue sched_yield  */
 
 #ifdef PRETEND2_5_X
 #define linux_version_code LINUX_VERSION(2,5,43)
            char _str[ROWBUFSIZ]; \
            snprintf(_str, sizeof(_str), fmt, ## arg); \
            putp(_str); \
-        } while (0);
+        } while (0)
 
 /*------  Special Macros (debug and/or informative)  ---------------------*/
 
@@ -557,7 +556,7 @@ typedef struct win {
 //atic void        cpudo (CPUS_t *cpu, const char *pfx);
 //atic void        frame_states (proc_t **ppt, int show);
 //atic void        frame_storage (void);
-//atic void        mkcol (WIN_t *q, PFLG_t idx, int sta, int *pad, char *buf, ...);
+//atic void        mkcol (WIN_t *q, int a, int c, int *p, char *b, const char *f, ...);
 //atic void        show_a_task (WIN_t *q, proc_t *task);
 /*------  Main Screen routines  ------------------------------------------*/
 //atic void        do_key (unsigned c);