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