4BSD/usr/man/cat8/init.8
INIT(8) UNIX Programmer's Manual INIT(8)
NAME
init - process control initialization
SYNOPSIS
/etc/init
DESCRIPTION
_I_n_i_t is invoked inside UNIX as the last step in the boot
procedure. It normally then runs the automatic reboot
sequence as described in _r_e_b_o_o_t(8), and if this succeeds,
begins multi-user operation. If the reboot fails, it com-
mences single user operation by giving the super-user a
shell on the console. It is possible to pass parameters
from the boot program to _i_n_i_t so that single user operation
is commenced immediately. When such single user operation
is terminated by killing the single-user shell (i.e. by hit-
ting ^D), _i_n_i_t runs /_e_t_c/_r_c without the reboot parameter.
This command file performs housekeeping operations such as
removing temporary files, mounting file systems, and start-
ing daemons.
In multi-user operation, _i_n_i_t'_s role is to create a process
for each terminal port on which a user may log in. To begin
such operations, it reads the file /_e_t_c/_t_t_y_s and forks
several times to create a process for each terminal speci-
fied in the file. Each of these processes opens the
appropriate terminal for reading and writing. These chan-
nels thus receive file descriptors 0, 1 and 2, the standard
input and output and the diagnostic output. Opening the
terminal will usually involve a delay, since the _o_p_e_n is not
completed until someone is dialed up and carrier established
on the channel. Then /_e_t_c/_g_e_t_t_y is called with argument as
specified by the second character of the _t_t_y_s file line.
_G_e_t_t_y reads the user's name and invokes _l_o_g_i_n to log in the
user and execute the Shell.
Ultimately the Shell will terminate because of an end-of-
file either typed explicitly or generated as a result of
hanging up. The main path of _i_n_i_t, which has been waiting
for such an event, wakes up and removes the appropriate
entry from the file _u_t_m_p, which records current users, and
makes an entry in /_u_s_r/_a_d_m/_w_t_m_p, which maintains a history
of logins and logouts. Then the appropriate terminal is
reopened and _g_e_t_t_y is reinvoked.
_I_n_i_t catches the _h_a_n_g_u_p signal (signal SIGHUP) and inter-
prets it to mean that the file /_e_t_c/_t_t_y_s should be read
again. The Shell process on each line which used to be
active in _t_t_y_s but is no longer there is terminated; a new
process is created for each added line; lines unchanged in
the file are undisturbed. Thus it is possible to drop or
add phone lines without rebooting the system by changing the
Printed 11/10/80 1
INIT(8) UNIX Programmer's Manual INIT(8)
_t_t_y_s file and sending a _h_a_n_g_u_p signal to the _i_n_i_t process:
use `kill -HUP 1.'
_I_n_i_t will terminate multi-user operations and resume
single-user mode if sent a terminate (TERM) signal, i.e.
``kill -TERM 1''. If there are processes outstanding which
are deadlocked (due to hardware or software failure), _i_n_i_t
will not wait for them all to die (which might take for-
ever), but will time out after 30 seconds and print a warn-
ing message.
_I_n_i_t'_s role is so critical that if it dies, the system will
reboot itself automatically. If, at bootstrap time, the
_i_n_i_t process cannot be located, the system will loop in user
mode at location 0x13.
FILES
/dev/console, /dev/tty?, /etc/utmp, /usr/adm/wtmp,
/etc/ttys, /etc/rc
SEE ALSO
login(1), kill(1), sh(1), ttys(5), crash(8), getty(8),
rc(8), reboot(8)
Printed 11/10/80 2