INIT(8)        Linux System Administrator's Manual        INIT(8)

NAME
       init, telinit - process control initialization

SYNOPSIS
       /sbin/init [ 0123456Ss ]
       /sbin/telinit [ -t sec ] [ 0123456sSQqabcUu ]

DESCRIPTION
   Init
       Init  is the father of all processes.  Its primary role is
       to create processes from  a  script  stored  in  the  file
       /etc/inittab  (see  inittab(5)).   This  file  usually has
       entries which cause init to spawn gettys on each line that
       users  can  log in.  It also controls autonomous processes
       required by any particular system.

RUNLEVELS
       A runlevel is a software configuration of the system which
       allows  only  a selected group of processes to exist.  The
       processes spawned by init for each of these runlevels  are
       defined  in  the /etc/inittab file.  Init can be in one of
       eight runlevels: 0-6 and S or s.  The runlevel is  changed
       by  having  a  privileged  user  run  telinit, which sends
       appropriate signals to init, telling it which runlevel  to
       change to.

       Runlevels  0, 1, and 6 are reserved. Runlevel 0 is used to
       halt the system, runlevel 6 is used to reboot the  system,
       and  runlevel 1 is used to get the system down into single
       user mode. Runlevel S is  not  really  meant  to  be  used
       directly,  but more for the scripts that are executed when
       entering runlevel 1. For more information on this, see the
       manpages for shutdown(8) and inittab(5).

       Runlevels  7-9  are  also  valid,  though not really docu-
       mented. This is because "traditional" Unix variants  don't
       use  them.   In case you're curious, runlevels S and s are
       in fact the same.  Internally they  are  aliases  for  the
       same  runlevel  - this is just a leftover from the systems
       the author used to use when writing sysvinit.

BOOTING
       After init is invoked as the last step of the kernel  boot
       sequence,  it  looks  for  the file /etc/inittab to see if
       there is an entry  of  the  type  initdefault  (see  init-
       tab(5)). The initdefault entry determines the initial run-
       level of the system.  If there is no  such  entry  (or  no
       /etc/inittab  at  all),  a runlevel must be entered at the
       system console.

       Runlevel S or s bring the system to single user  mode  and
       do  not  require  an  /etc/initttab  file.  In single user
       mode, /sbin/sulogin is invoked on /dev/console.

       When entering single user mode, init reads  the  console's
       ioctl(2)  states  from  /etc/ioctl.save. If this file does
       not exist, init initializes the line at 9600 baud and with
       CLOCAL  settings.   When  init leaves single user mode, it
       stores the console's ioctl settings in this file so it can
       re-use them for the next single-user session.

       When  entering  a multi-user mode for the first time, init
       performs the boot and bootwait entries to allow file  sys-
       tems  to  be  mounted  before  users can log in.  Then all
       entries matching the runlevel are processed.

       When starting a new process, init first checks whether the
       file  /etc/initscript  exists.  If  it  does, it uses this
       script to start the process.

       Each time a child terminates, init records  the  fact  and
       the  reason  it  died  in /var/run/utmp and /var/log/wtmp,
       provided that these files exist.

CHANGING RUNLEVELS
       After it has spawned all of the processes specified,  init
       waits for one of its descendant processes to die, a power-
       fail signal, or until it is signaled by telinit to  change
       the system's runlevel.  When one of the above three condi-
       tions occurs, it re-examines the /etc/inittab  file.   New
       entries  can  be added to this file at any time.  However,
       init still waits for one of the above three conditions  to
       occur.   To  provide  for  an  instantaneous response, the
       telinit Q or q command can wake up init to re-examine  the
       /etc/inittab file.

       If  init  is not in single user mode and receives a power-
       fail signal, special powerfail entries are invoked.

       When init is requested to change the  runlevel,  it  sends
       the warning signal SIGTERM to all processes that are unde-
       fined in the new runlevel.  It then waits 5 seconds before
       forcibly  terminating these processes via the SIGKILL sig-
       nal.  Note that init assumes that all these processes (and
       their  descendants) remain in the same process group which
       init originally created for them.  If any process  changes
       its  process  group  affiliation it will not receive these
       signals.  Such processes need to be terminated separately.

TELINIT
       /sbin/telinit  is  linked  to /sbin/init.  It takes a one-
       character argument and signals init to perform the  appro-
       priate  action.   The  following arguments serve as direc-
       tives to telinit:

       0,1,2,3,4,5 or 6
              tell init to switch to the specified run level.

       a,b,c  tell init to process only those  /etc/inittab  file
              entries having runlevel a,b or c.

       Q or q tell init to re-examine the /etc/inittab file.

       S or s tell init to switch to single user mode.

       U or u tell  init  to  re-execute  itself  (preserving the
              state). No re-examining of /etc/inittab  file  hap-
              pens. Run level should be one of Ss12345, otherwise
              request would be silently ignored.

       telinit can also tell init how long it should wait between
       sending  processes  the  SIGTERM and SIGKILL signals.  The
       default is 5 seconds, but this can be changed with the  -t
       sec option.

       telinit  can  be  invoked  only  by users with appropriate
       privileges.

       The init binary checks if it is init or telinit by looking
       at its process id; the real init's process id is always 1.
       From this it follows that instead of calling  telinit  one
       can also just use init instead as a shortcut.

ENVIRONMENT
       Init  sets the following environment variables for all its
       children:

       PATH   /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

       INIT_VERSION
              As the name says. Useful to determine if  a  script
              runs directly from init.

       RUNLEVEL
              The current system runlevel.

       PREVLEVEL
              The  previous  runlevel  (useful  after  a runlevel
              switch).

       CONSOLE
              The system console. This is really  inherited  from
              the  kernel; however if it is not set init will set
              it to /dev/console by default.

BOOTFLAGS
       It is possible to pass a number of flags to init from  the
       boot monitor (eg. LILO). Init accepts the following flags:

       S, single
            Single user mode boot. In this mode  /etc/inittab  is
            examined  and  the  bootup rc scripts are usually run
            before the single user mode shell is started.

       1-5  Runlevel to boot into.

       -b, emergency
            Boot directly into a single user shell  without  run-
            ning any other startup scripts.

INTERFACE
       Init  listens  on  a  fifo in /dev, /dev/initctl, for mes-
       sages.  Telinit uses this to communicate  with  init.  The
       interface  is  not very well documented or finished. Those
       interested should study the initreq.h  file  in  the  src/
       subdirectory of the init source code tar archive.

SIGNALS
       Init reacts to several signals:

       SIGHUP
            Init  looks for /etc/initrunlvl and /var/log/initrun-
            lvl.  If one of these  files  exist  and  contain  an
            ASCII  runlevel,  init  switches to the new runlevel.
            This is for backwards compatibility only! .   In  the
            normal case (the files don't exist) init behaves like
            telinit q was executed.

       SIGUSR1
            On receipt of this signals, init closes and  re-opens
            it's   control   fifo,   /dev/initctl.   Useful   for
            bootscripts when /dev is remounted.

       SIGINT
            Normally the kernel sends this signal  to  init  when
            CTRL-ALT-DEL  is pressed. It activates the ctrlaltdel
            action.

       SIGWINCH
            The kernel sends this signal when the  KeyboardSignal
            key is hit.  It activates the kbrequest action.

CONFORMING TO
       Init  is  compatible  with  the  System  V  init. It works
       closely together  with  the  scripts  in  the  directories
       /etc/init.d  and /etc/rc{runlevel}.d.  If your system uses
       this convention, there should be  a  README  file  in  the
       directory /etc/init.d explaining how these scripts work.

FILES
       /etc/inittab
       /etc/initscript
       /dev/console
       /etc/ioctl.save
       /var/run/utmp
       /var/log/wtmp
       /dev/initctl

WARNINGS
       Init  assumes  that processes and descendants of processes
       remain in the same process group which was originally cre-
       ated  for them.  If the processes change their group, init
       can't kill them and you may  end  up  with  two  processes
       reading from one terminal line.

DIAGNOSTICS
       If  init finds that it is continuously respawning an entry
       more than 10 times in 2 minutes, it will assume that there
       is  an error in the command string, generate an error mes-
       sage on the system console, and  refuse  to  respawn  this
       entry  until either 5 minutes has elapsed or it receives a
       signal.  This prevents it from eating up system  resources
       when someone makes a typographical error in the /etc/init-
       tab file or the program for the entry is removed.

AUTHOR
       Miquel van Smoorenburg (miquels@cistron.nl), initial  man-
       ual  page by Michael Haardt (u31b3hs@pool.informatik.rwth-
       aachen.de).

SEE ALSO
       getty(1), login(1), sh(1), who(1),  shutdown(8),  kill(1),
       inittab(5), initscript(5), utmp(5)

                           9 March 1998                         1