1 WHO

  Invokes a program to display various attributes of processes on the
  local node, or any other node in the network.

2 More_about_WHO
  WHO was written in response to a need to see which users in a network,
  where everyone had lots of privileges (developers !) and people tended
  to increase their base priority because they thought they were important.
  It has evolved into a general-purpose tool for examining the processes on
  the VMS systems in your network.

  The default field options can be changed by playing with the .CLD file.
  I assume that system managers who want to get the best out of WHO are
  familiar with, or prepared to learn about, things like the VAX Command
  Language Utility, etc.

  Note that WHO, like some other DECnet objects, can be used by experienced
  hackers as a way of learning about your network. For example, it will give
  them a list of users on remote nodes whose password they can try to guess.
  If you are worried about unprivileged users (authorised or not) trying to
  gain elevated privileges, you should probably think twice about installing
  WHO. If you decide against it, you should also disable PHONE as a network
  object; I am not going to disclose here how this threatens your security.

  WHO can be run without privileges, but then users will only get information
  about processes to which they would normally have access with utilities such
  as SHOW PROCESS. If this is what you want then don't install it. However, for
  best results across the network, you should install WHO with WORLD privilege
  on remote nodes. The alternative is to give your proxy account on the remote
  node WORLD privilege, which is extermely dangerous. If you do neither, you
  will only get information from the remote node about processes which share
  a UIC with your proxy account (or DECNET).

  This program is FREE. Users of PC software may be familiar with a phenomenon
  called shareware, whereby you pay for software after you decide you like and
  want to use it. I do not exclude the possibility that this program may
  evolve into shareware or even prepaid software at some future time, and I
  reserve all rights to the software. You may copy it freely and give it away
  to anybody you like, as long as this text, and the equivalent notices in
  the sources, remain intact. If you find WHO so useful that you feel an
  urge to pay for it, send $10 to your favourite charity.

  You should have received the C source of WHO. If you have access to VAX C,
  you are encouraged to review the program and compile it yourself before
  using it, not because I think that the software is so wonderful you must
  read it, but because this is a good way to protect yourself against some
  of the less savoury characters out there.

  If you have any questions, comments, or bugs to report, please contact:

         Nick Brown
         c/o Albert van Dalsumlaan 119
         3584 HC Utrecht
         The Netherlands

  Please do not send tapes in the first instance as the above address is only
  for forwarding of letters; anything heavier will be thrown away. If you
  report a fixable bug I will endeavour get in touch with you to arrange a fix.
  If you require a reply, please send an International Reply Coupon; this is
  a kind of stamp that works anywhere, available from any Post Office. Send one
  that is valid for anywhere in the world, since I don't know where I'm going
  to be.

  Naturally, since this is free software, I accept no responsibility for any
  loss or damage to any data. Nor do I offer any warranty that this software
  works as described under any particular circumstances. In other words,
  no price, no guarantee.

  Quick advertisement: my other masterpieces, XCOPY (enhanced file copying),
  and FRAG (yes, yet another disk fragmentation indicator), should also
  be available somewhere in the vicinity of this program. Please feel free
  to use and/or distribute them.
2 Command_Qualifiers

/ADD_FIELDS
 /ADD_FIELDS=(option[,...])

  Specifies extra fields to be listed. This qualifier is typically used
  to modify slightly the default values of /FIELDS, without having to
  give a complete list of all required fields. See the description of
  /FIELDS for a list of possible options.

/EXCLUDE_USERS
 /EXCLUDE_USERS=(name[,...])

  Specifies the names of users whose processes should be excluded from the
  report. If this qualifier is omitted, processes belonging to all users are
  listed. Up to three usernames may be specified, and wildcards may be used
  (with * and/or %).

  This qualifier is mutually exclusive with /USERS.

/FIELDS
 /FIELDS=(option[,...])

  Specifies the information fields to be listed. See the description
  of the system service $GETJPI. The field names do not always match
  the $GETJPI options directly, to minimise amibiguity and thus the
  length of the strings to be typed. The options you can specify, with
  the corresponding parameter to $GETJPI, are as follows; the letter
  (D) in parentheses indicates default fields.

         USERNAME (D)            JPI$_USERNAME
         PROCESS_NAME (D)        JPI$_PRCNAM
         PID (D)                 JPI$_PID
         BASE_PRIORITY (D)       JPI$_PRIB
         TERMINAL (D)            JPI$_TERMINAL
         WSSIZE (D)              JPI$_WSSIZE
         QUOTA                   JPI$_WSQUOTA
         EXTENT                  JPI$_WSEXTENT
         P_MEMORY                JPI$_PPGCNT
         G_MEMORY                JPI$_GPGCNT
         MEMORY                  JPI$_PPGCNT + JPI$_GPGCNT
         BUFFERED_IO             JPI$_BUFIO
         DIRECT_IO               JPI$_DIRIO
         IO                      JPI$_BUFIO + JPI$_DIRIO
         FAULTS                  JPI$_PAGEFLTS
         CPU_TIME (D)            JPI$_CPUTIM; reported in seconds.
         IMAGE_NAME (D)          JPI$_IMAGNAME
         JOB_PAGEFILEQUOTA       JPI$_PGFLQUOTA
         PAGEFILE_LEFT           JPI$_PAGFILCNT
         MODE                    JPI$_JOBTYPE + JPI$_MODE;
                                   reported as two letters with
                                   jobtype DIALUP shown as 'M'.
         STATE                   JPI$_STATE
         CONNECT_TIME            JPI$_LOGINTIM - current time;
                                   reported in minutes.
         AUTHPRIV                JPI$_AUTHPRIV
         CURPRIV                 JPI$_CURPRIV
         DEFPRIV                 JPI$_PROCPRIV
                                   (All privileges are reported in groups,
                                    as categorised by AUTHORIZE.)

  See also the descriptions of /ADD_FIELDS and /SUBTRACT_FIELDS.

/HIGHLIGHT
 /HIGHLIGHT[=(field[,...])]
 /NOHIGHLIGHT (default)

  This qualifier enables various fields of the report to be highlighted
  on VT terminals. It is up to the user to ensure that the terminal can
  handle the highlighting escape sequences; currently, the highlights used
  are bold, inverse video, and underscore.

  The following fields may be highlighted:

         WSSIZE                  working sets equal to SYSGEN
                                     parameter SWPOUTPGCNT.
         BASE                    interactive processes with base priority
                                     other than SYSGEN parameter DEFPRI.
         ALL (D)                 all of the above.
    
/IMAGES
 /IMAGES=(name[,...])

  If specified, lists the names of images which a process must be running
  to be included in the list. If this qualifier is omitted, processes are
  listed regardless of the image being run. Up to three image names may be
  specified, and wildcards may be used (with * and/or %). The wildcard %*
  matches any non-blank image name.

/JOBTYPES
 /JOBTYPES=(option[,...])

  Specifies the types of jobs which are to be listed. See the description
  of the parameter JPI$_JOBTYPE to the system service $GETJPI. The options
  you can specify are:

         DETACHED
         NETWORK
         BATCH
         LOCAL
         DIALUP
         REMOTE
         ALL (D)

/MAX_PROCESSES
 /MAX_PROCESSES=n

  Specifies the maximum number of processes on which WHO is to report. The
  default is 256, which should be enough for most systems.

/MODES
 /MODES=(option[,...])

  Specifies the modes of processes to be listed. See the description
  of the parameter JPI$_JOBMODE to the system service $GETJPI. The options
  you can specify are:

         OTHER
         NETWORK
         BATCH
         INTERACTIVE (D)
         ALL

/NODES
 /NODES=(node[,...])

  Specifies the node names for which to report. The local node may be
  indicated with the value 0; in this case, no DECnet operations are
  performed.

  If this qualifier is omitted, the value 0 is used.

/SORT_KEY
 /SORT_KEY=(option[,...])
 /NOSORT_KEY

  Specifies the field on which the report is to be sorted. The options
  you can specify, corresponding to the equivalent options for /FIELDS,
  with the sort order used, are:

         USERNAME (D)            ascending
         PID                     ascending
         FAULTS                  descending
         CPU_TIME                descending
         CONNECT_TIME            descending
         IO                      descending
         IMAGE_NAME              ascending

/SUBTRACT_FIELDS
 /SUBTRACT_FIELDS=(option[,...])

  Specifies fields which are not to be listed. This qualifier is typically
  used to modify slightly the default values of /FIELDS, without having to
  give a complete list of all required fields. See the description of
  /FIELDS for a list of possible options.

/TERMINALS
 /TERMINALS=(name[,...])

  If specified, lists the names of terminals to which a process must be
  attached to be included in the list. If this qualifier is omitted,
  processes are listed regardless of the terminal (if any) to which they
  are attached. Up to three terminal names may be specified, and wildcards
  may be used (with * and/or %). The wildcard %* matches any non-blank
  terminal name.

/USERS
 /USERS=(name[,...])

  Specifies the names of users for whom to report. If this qualifier is
  omitted, processes belonging to all users are listed. Up to three
  usernames may be specified, and wildcards may be used (with * and/or %).

  This qualifier is mutually exclusive with /EXCLUDE_USERS.
2 Installation

  There is no installation command procedure. To install WHO permanently,
  put WHO.EXE in SYS$SYSTEM, and add WHO to your command tables as follows:

  $ set command /tables=SYS$COMMON:[SYSLIB]DCLTABLES -
                /output=SYS$COMMON:[SYSLIB]DCLTABLES -
                who.cld
  $ install replace SYS$COMMON:[SYSLIB]DCLTABLES

  For temporary installation, you can define the logical name WHO to point
  to WHO.EXE, and use "$ set command WHO.CLD" to define the command.

  Before WHO can report on a remote node, it must be resident on that node
  in SYS$SYSTEM, and INSTALLed with WORLD privilege. It should also be made
  known to NCP as follows:

  NCP> DEFINE OBJECT WHO NUMBER 0 FILE SYS$SYSTEM:WHO.EXE
2 Examples

  1.   $ WHO

  Produces a report similar to SHOW USERS, for the local node.

  2.   $ WHO /IMAGE=EDT

  Shows all users who are running the EDT editor.

  3.   $ WHO /FIELDS=(PID, PROCESS_NAME, BASE_PRIORITY, TERMINAL, -
                      WSSIZE, CPU_TIME, IMAGE_NAME, FAULTS) -
             /MODES=ALL /SORT=PID /NODES=(RNODE, 0)

  Produces a report similar to SHOW SYSTEM, for the node RNODE and the
  local node, in that order.

  4.    $ ALLNODES = "(0,NODE1,NODE2,NODE3,NODE4)"
        $ HERE = "," + F$GETSYI("NODENAME")
        $ NODES = ALLNODES - HERE
        $ CWHO = "WHO/NODE=''NODES'"
        $ CWHO /USER=OPER* /MODES=ALL

  In a cluster with nodes NODE1, NODE2, NODE3, and NODE4, shows, for all nodes,
  which processes are running for users whose username begins with OPER. The
  symbol definition preamble ensures that the local node is always accessed
  via nodename 0, saving some DECnet access overhead.
