NAME
init - MachTen initialization

SYNOPSIS
/etc/init

DESCRIPTION
Init is the first UNIX process to be executed by MachTen. Once the
UNIX kernel (vmunix) is loaded, init is loaded and run. Init first
runs the system initialization command script, rc which performs
housekeeping operations such as removing temporary files, mounting
file systems, and starting daemons. If this succeeds, init begins
multi-user operation. If the rc script fails, init commences
single user operation by giving the superuser a shell on the
console. When such single user operation is terminated by killing
the single user shell (i.e. by hitting ^D), init begins multi-user
operation.

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 executes a command for
each terminal specified in the file. This command will usually be
/etc/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 /usr/adm/wtmp,
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 deadlocked (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 message.

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.

DIAGNOSTICS
/etc/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 (won’t 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.

FILES
/dev/console, /dev/tty*, /etc/utmp, /usr/adm/wtmp, /etc/ttys,
/etc/rc

NOTES
The /usr/adm/wtmp file is not created during installation of
MachTen. Entries are not added to this file if it does not exist.
This service can be enabled by creating this file.

BUGS
When the terminate signal is sent to init and the MachTen window
daemon is running, init will wait forever. If the window daemon
subsequently terminates, init will terminate.

SEE ALSO
login(1), kill(1), sh(1), ttys(5), getty(8), rc(8), reboot(8),
halt(8), shutdown(8), windows(1)