add the 'y' and 'Y' options to ps, and add the 'iac' keyword. The 'y'
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 29 Jul 2004 09:20:39 +0000 (09:20 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 29 Jul 2004 09:20:39 +0000 (09:20 +0000)
option and 'iac' keyword displays the interactive heuristic calcualtion.
It is a value between -127 and 127 where lower numbers indicate more
interactive and higher numbers indicate more batch-like.

bin/ps/keyword.c
bin/ps/ps.1
bin/ps/ps.c

index 75bcfb4..ba38057 100644 (file)
@@ -32,7 +32,7 @@
  *
  * @(#)keyword.c       8.5 (Berkeley) 4/2/94
  * $FreeBSD: src/bin/ps/keyword.c,v 1.24.2.3 2002/10/10 20:05:32 jmallett Exp $
- * $DragonFly: src/bin/ps/keyword.c,v 1.10 2004/03/19 17:47:49 cpressey Exp $
+ * $DragonFly: src/bin/ps/keyword.c,v 1.11 2004/07/29 09:20:39 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -91,6 +91,8 @@ VAR var[] = {
        {"cputime", "", "time"},
        {"f", "F", NULL, 0, pvar, NULL, 7, POFF(p_flag), INT, "x"},
        {"flags", "", "f"},
+       {"iac", "IAC", 
+               NULL, 0, pvar, NULL, 4, POFF(p_interactive), CHAR, PIDFMT},
        {"ignored", "", "sigignore"},
        {"inblk", "INBLK",
                NULL, USER, rvar, NULL, 4, ROFF(ru_inblock), LONG, "ld"},
index f415e2b..7c51860 100644 (file)
@@ -31,7 +31,7 @@
 .\"
 .\"     @(#)ps.1       8.3 (Berkeley) 4/18/94
 .\" $FreeBSD: src/bin/ps/ps.1,v 1.24.2.7 2002/06/20 22:43:33 charnier Exp $
-.\" $DragonFly: src/bin/ps/ps.1,v 1.2 2003/06/17 04:22:50 dillon Exp $
+.\" $DragonFly: src/bin/ps/ps.1,v 1.3 2004/07/29 09:20:39 dillon Exp $
 .\"
 .Dd April 18, 1994
 .Dt PS 1
@@ -41,7 +41,7 @@
 .Nd process status
 .Sh SYNOPSIS
 .Nm
-.Op Fl aCcefhjlmrSTuvwx
+.Op Fl aCcefhjlmrSTuvwxyY
 .Op Fl M Ar core
 .Op Fl N Ar system
 .Op Fl O Ar fmt
@@ -178,6 +178,12 @@ option is specified more than once,
 will use as many columns as necessary without regard for your window size.
 .It Fl x
 Display information about processes without controlling terminals.
+.It Fl y
+Display information associated with the following keywords:
+uid, pid, ppid, cpu, pri, iac, nice, wchan, state, tt, time, and command.
+Sort by iac (interactivity measure).
+.It Fl Y
+Sort by iac (interactivity measure).
 .El
 .Pp
 A complete list of the available keywords are listed below.
index a7a642f..888bec5 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1990, 1993, 1994 The Regents of the University of California.  All rights reserved.
  * @(#)ps.c    8.4 (Berkeley) 4/2/94
  * $FreeBSD: src/bin/ps/ps.c,v 1.30.2.6 2002/07/04 08:30:37 sobomax Exp $
- * $DragonFly: src/bin/ps/ps.c,v 1.9 2004/06/21 01:03:06 hmp Exp $
+ * $DragonFly: src/bin/ps/ps.c,v 1.10 2004/07/29 09:20:39 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -77,13 +77,13 @@ int totwidth;               /* calculated width of requested variables */
 static int needuser, needcomm, needenv;
 #if defined(LAZY_PS)
 static int forceuread=0;
-#define PS_ARGS        "aCcefghjLlM:mN:O:o:p:rSTt:U:uvwx"
+#define PS_ARGS        "aCcefghjLlM:mN:O:o:p:rSTt:U:uvwxyY"
 #else
 static int forceuread=1;
-#define PS_ARGS        "aCceghjLlM:mN:O:o:p:rSTt:U:uvwx"
+#define PS_ARGS        "aCceghjLlM:mN:O:o:p:rSTt:U:uvwxyY"
 #endif
 
-enum sort { DEFAULT, SORTMEM, SORTCPU } sortby = DEFAULT;
+enum sort { DEFAULT, SORTMEM, SORTCPU, SORTIAC } sortby = DEFAULT;
 
 static const char *getfmt (char **(*)(kvm_t *, const struct kinfo_proc *, int),
                    KINFO *, char *, int);
@@ -106,6 +106,7 @@ static char   o1[] = "pid";
 static char   o2[] = "tt state time command";
 static char ufmt[] = "user pid %cpu %mem vsz rss tt state start time command";
 static char vfmt[] = "pid state time sl re pagein vsz rss lim tsiz %cpu %mem command";
+static char yfmt[] = "uid pid ppid cpu pri iac nice wchan state tt time command";
 
 kvm_t *kd;
 
@@ -280,6 +281,14 @@ main(int argc, char **argv)
                case 'x':
                        xflg = 1;
                        break;
+               case 'y':
+                       parsefmt(yfmt);
+                       fmt = 1;
+                       yfmt[0] = '\0';
+                       /* fall through */
+               case 'Y':
+                       sortby = SORTIAC;
+                       break;
                case '?':
                default:
                        usage();
@@ -423,7 +432,7 @@ getuids(const char *arg, int *nuids)
        uids = NULL;
        for (; (l = strcspn(arg, SEP)) > 0; arg += l + strspn(arg + l, SEP)) {
                if (l >= sizeof name) {
-                       warnx("%.*s: name too long", l, arg);
+                       warnx("%.*s: name too long", (int)l, arg);
                        continue;
                }
                strncpy(name, arg, l);
@@ -570,6 +579,8 @@ pscomp(const void *a, const void *b)
 #define VSIZE(k) (KI_EPROC(k)->e_vm.vm_dsize + KI_EPROC(k)->e_vm.vm_ssize + \
                  KI_EPROC(k)->e_vm.vm_tsize)
 
+       if (sortby == SORTIAC)
+               return (KI_PROC((const KINFO *)a)->p_interactive - KI_PROC((const KINFO *)b)->p_interactive);
        if (sortby == SORTCPU)
                return (getpcpu((const KINFO *)b) - getpcpu((const KINFO *)a));
        if (sortby == SORTMEM)