11/3/71 /ETC/INIT (VII)
NAME init -- process initialization
SYNOPSIS --
DESCRIPTION init is invoked inside UNIX as the last step in
the boot procedure. It first carries out several
housekeeping duties: it must change the modes of
the tape files and the RK disk file to 17, be-
cause if the system crashed while a tap or rk
command was in progress, these files would be in-
accessible; it also truncates the file /tmp/utmp,
which contains a list of UNIX users, again as a
recovery measure in case of a crash. Directory
usr is assigned via sys mount as resident on the
RK disk.
init then forks several times so as to create one
process for each typewriter channel on which a
user may log in. Each process changes the mode
of its typewriter to 15 (read/write owner,
write-only non-owner; this guards against random
users stealing input) and the owner to the
super-user. Then the typewriter is opened for
reading and writing. Since these opens are for
the first files open in the process, they receive
the file descriptors 0 and 1, the standard input
and output file descriptors. It is likely that
no one is dialled in when the read open takes
place; therefore the process waits until someone
calls. At this point, init types its "login:"
message and reads the response, which is looked
up in the password file. The password file con-
tains each user's name, password, numerical user
ID, default working directory, and default shell.
If the lookup is successful and the user can sup-
ply his password, the owner of the typewriter is
changed to the appropriate user ID. An entry is
made in /tmp/utmp for this user to maintain an
up-to-date list of users. Then the user ID of
the process is changed appropriately, the current
directory is set, and the appropriate program to
be used as the Shell is executed.
At some point the process will terminate, either
because the login was successful but the user has
now logged out, or because the login was unsec-
cessful. The parent routine of all the children
of init has meanwhile been waiting for such an
event. When return takes place from the sys
wait, init simply forks again, and the child pro-
cess again awaits a user.
There is a fine point involved in reading the lo-
gin message. UNIX is presently set up to handle
automatically two types of terminals: 150 baud,
full duplex terminals with the line-feed function
(typically, the Model 37 Teletype terminal), and
300 baud, full duplex terminals with only the
line-space function (typically the GE TermiNet
terminal). The latter type identifies itself by
sending a line-break (long space) signal at login
time. Therefore, if a null character is received
during reading of the login line, the typewriter
mode is set to accommodate this terminal and the
"login:" message is typed again (because it was
garbled the first time).
Init, upon first entry, checks the switches for
73700. If this combination is set, init will
open /dev/tty as standard input and output and
directly execute /bin/sh. In this manner, UNIX
can be brought up with a minimum of hardware and
software.
FILES /dev/utmp, /dev/tty0 ... /dev/ttyn
SEE ALSO sh
DIAGNOSTICS "No directory", "No shell". There are also some
halts if basic I/O files cannot be found in /dev.
BUGS --
BUGS ken, dmr