init - process control initialization
Init is invoked inside UNIX as the last step in the boot procedure. It normally then runs
the automatic reboot sequence as described in reboot(8), and if this succeeds, begins
multi-user operation. If the reboot fails, it commences single user operation by giving
the super-user a shell on the console. It is possible to pass parameters from the boot
program to init so that single user operation is commenced immediately. When such single
user operation is terminated by killing the single-user shell (i.e. by hitting ^D), init
runs /etc/rc without the reboot parameter. This command file performs housekeeping opera-
tions such as removing temporary files, mounting file systems, and starting daemons.
In multi-user operation, init'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 /etc/ttys and exe-
cutes a command for each terminal specified in the file. This command will usually be
/usr/libexec/getty. Getty opens and initializes the terminal line, reads the user's name
and invokes login 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 init, which has been waiting for
such an event, wakes up and removes the appropriate entry from the file utmp, which
records current users, and makes an entry in the wtmp, file which maintains a history of
logins and logouts. The wtmp entry is made only if a user logged in successfully on the
line. Then the appropriate terminal is reopened and getty is reinvoked.
Init catches the hangup signal (signal SIGHUP) and interprets it to mean that the file
/etc/ttys should be read again. The Shell process on each line which used to be active in
ttys 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 terminal
lines without rebooting the system by changing the ttys file and sending a hangup signal
to the init process: use `kill -HUP 1.'
Init 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 dead-
locked (due to hardware or software failure), init will not wait for them all to die
(which might take forever), but will time out after 30 seconds and print a warning mes-
Init will cease creating new getty's and allow the system to slowly die away, if it is
sent a terminal stop (TSTP) signal, i.e. ``kill -TSTP 1''. A later hangup will resume
full multi-user operations, or a terminate will initiate a single user shell. This hook
is used by reboot(8) and halt(8).
Init's role is so critical that if it dies, the system will reboot itself automatically.
If, at bootstrap time, the init process cannot be located, the system will loop in user
mode at location 0x13.
/usr/libexec/getty gettyargs failing, sleeping. A process being started to service a line
is exiting quickly each time it is started. This is often caused by a ringing or noisy
terminal line. Init will sleep for 30 seconds, then continue trying to start the process.
WARNING: Something is hung (wont die); ps axl advised. A process is hung and could not be
killed when the system was shutting down. This is usually caused by a process which is
stuck in a device driver due to a persistent device error condition.
/dev/console, /dev/tty*, /var/run/utmp, /usr/adm/wtmp, /etc/ttys, /etc/rc
login(1), kill(1), sh(1), ttys(5), crash(8), getty(8), rc(8), reboot(8), halt(8), shut-
4th Berkeley Distribution November 27, 1996 INIT(8)