The who command is derived from the CTSS command of the same name, written by Noel Morris in 1965. It lists the users logged in. I wrote the original Multics who command when we were first debugging the answering service in 1967 or 1968; it took its data from the segment >sc1>answer_table, the primary database for information about logged-in users. Later, we decided to create a separate segment for who's use, >sc1>whotab. (The as_who tool was used by system administrators who had permission to look at the segment >sc1>answer_table.)
Here is the output of who -lg -a from 1997:
Multics MR12.3b; DOCKMASTER
Load = 15.0 out of 140.0 units; users = 15, 2 interactive, 13 daemons.
Absentee users = 0 background; Max background absentee users = 3
System up since 09/03/97 1253.9 edt Wed
Last crash was at 09/03/97 1130.0 edt Wed
Login at TTY Load User ID
09/03/97 12:54 bk 1.0 Backup.SysDaemon
12:54 ut 1.0 Utility.SysDaemon
12:54 mon 1.0 Monitor.SysDaemon
12:54 mt 1.0 Metering.Daemon
12:54 gand 1.0 Gandalf.Daemon
12:54 mida 1.0 Midas.Daemon
12:55 auth 1.0 Authenticate.Daemon
13:07 cord 1.0 IO.SysDaemon
13:07 prtb 1.0 IO.SysDaemon
15:11 in 1.0 Internet.Daemon
15:13 ns 1.0 Network_Server.Daemon
15:13 nm 1.0 Network_Mailer.Daemon
16:57 vcom 1.0 Volume_Dumper.Daemon
17:08 3106 1.0 Mestman.Novell1
19:23 none 1.0 VanVleck.MWM
This command was issued while I was logged in via TELNET to the DOCKMASTER system in September 1997. The column titled TTY lists the "terminal id" for the device the user is logged in on. The various daemons are connected to the system via the message coordinator. Notice that there are two IO.SysDaemons, one coordinator process and a driver for printer B. (The distinction between the "SysDaemon" and "Daemon" processes is one of access; the "Daemon" project does not have access to hphcs_, but "SysDaemon" does.) The "Load" column was used on heavily loaded systems; certain process overseers were assigned non-unit weights if users could present more or less than average load. For example, limited service subsystem users might be assigned a load of 0.5.
Here is the output of help who -a:
>doc>info>who.info (70 lines in info)
03/01/85 who
Syntax as a command: who {User_ids} {-control_args}
Syntax as an active function: [who {User_ids} {-control_args}]
Function: lists the number, identification, and status of all users of
the system; it prints out a header and lists the name and project of
each user. The header consists of the system name, the total number of
users, the current system load, the maximum load, the current number of
absentee users, and the maximum number of absentee users. (See the
how_many_users command to print only the header.)
Arguments:
User_ids
are match names, where:
Person_id
lists users with the name Person_id.
.Project_id
lists users with the project name Project_id.
Person_id.Project.id
lists users with the specified person and project.
Control arguments:
-absentee, -as
lists absentee users (see "Notes").
-all, -a
lists all the interactive, absentee, and daemon users.
-brief, -bf
suppresses the printing of the header. Not allowed for the active
function.
-daemon, -dmn
lists daemon users (see "Notes").
-interactive, -ia
lists interactive users (see "Notes").
-long, -lg
prints the date and time logged in, the terminal identification, and
the load units, name, and project of each user. The header includes
installation identification and the time the system was brought up.
If available, the time of the next scheduled shutdown, the time when
service will resume after the shutdown, and the time of the previous
shutdown are printed. Not allowed for the active function.
-name, -nm
sorts the output by the name (Person_id) of each user.
-project, -pj
sorts the output by the Project_id of each user.
Notes: If you supply none of -interactive, -absentee, or -daemon and
give no User_ids, then all interactive and absentee users are listed;
but if you specify User_ids, then all matching users are listed. If
you provide one or more of -interactive, -absentee, or -daemon, only
processes of the selected type(s) are listed; if you also select
User_ids, then only users matching those control arguments and the
User_ids are listed.
Absentee users are denoted in the list by an asterisk following
Person_id.Project_id.
If you omit -name and -project, the output is sorted on login time.
You can't use both arguments together because the sort is performed on
one key at a time.
If you supply a User_id, the header is suppressed even if you give
-long. If you use who with no arguments, the system responds with a
two-line header followed by a list of interactive users sorted
according to login time.
Sometimes a Person_id.Project_id returned by the command is followed by
a "D" and/or an "S", where "D" refers to a disconnected process and "S"
refers to a suspended process.
You can prevent your own name from being listed by all users'
invocations of who; to do this, see your project administrator.
Notes on active function: The active function returns a list of
Person_id.Project_id pairs, requoted and separated by spaces. You can
use control arguments to select and sort.
Bernie points out that the very existence of the who command shows the existence of an online community. Knowing who's logged in is useful if you want to contact other users with send_message, mail, or phone, to share information or ask questions. That is, the who command contains the tacit assumption that the users of the Multics installation are all reasonable colleagues, with some shared set of values. This assumption is less valid in today's world of on-line service providers that support thousands of strangers.
Source as of MR10 (1982) is available on this site.
[THVV]
Source code for bound_info_rtns_, including the who command, as of MR12.5 (1999) is
available online at MIT.