<HTML ><HEAD ><TITLE >init comes first</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.63 "><LINK REL="HOME" TITLE="The Linux System Administrator's Guide" HREF="index.html"><LINK REL="UP" TITLE="init" HREF="init.html"><LINK REL="PREVIOUS" TITLE="init" HREF="init.html"><LINK REL="NEXT" TITLE="Configuring init to start getty: the /etc/inittab file" HREF="x2051.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >The Linux System Administrator's Guide: Version 0.7</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="init.html" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Chapter 9. <B CLASS="COMMAND" >init</B ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="x2051.html" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="AEN2016" >9.1. <B CLASS="COMMAND" >init</B > comes first</A ></H1 ><P ><B CLASS="COMMAND" >init</B > is one of those programs that are absolutely essential to the operation of a Linux system, but that you still can mostly ignore. A good Linux distribution will come with a configuration for <B CLASS="COMMAND" >init</B > that will work for most systems, and on these systems there is nothing you need to do about <B CLASS="COMMAND" >init</B >. Usually, you only need to worry about <B CLASS="COMMAND" >init</B > if you hook up serial terminals, dial-in (not dial-out) modems, or if you want to change the default run level.</P ><P >When the kernel has started itself (has been loaded into memory, has started running, and has initialised all device drivers and data structures and such), it finishes its own part of the boot process by starting a user level program, <B CLASS="COMMAND" >init</B >. Thus, <B CLASS="COMMAND" >init</B > is always the first process (its process number is always 1).</P ><P >The kernel looks for <B CLASS="COMMAND" >init</B > in a few locations that have been historically used for it, but the proper location for it (on a Linux system) is <TT CLASS="FILENAME" >/sbin/init</TT >. If the kernel can't find <B CLASS="COMMAND" >init</B >, it tries to run <TT CLASS="FILENAME" >/bin/sh</TT >, and if that also fails, the startup of the system fails.</P ><P >When <B CLASS="COMMAND" >init</B > starts, it finishes the boot process by doing a number of administrative tasks, such as checking filesystems, cleaning up <TT CLASS="FILENAME" >/tmp</TT >, starting various services, and starting a <B CLASS="COMMAND" >getty</B > for each terminal and virtual console where users should be able to log in (see <A HREF="log-in-and-out.html" >Chapter 10</A >).</P ><P >After the system is properly up, <B CLASS="COMMAND" >init</B > restarts <B CLASS="COMMAND" >getty</B > for each terminal after a user has logged out (so that the next user can log in). <B CLASS="COMMAND" >init</B > also adopts orphan processes: when a process starts a child process and dies before its child, the child immediately becomes a child of <B CLASS="COMMAND" >init</B >. This is important for various technical reasons, but it is good to know it, since it makes it easier to understand process lists and process tree graphs. <A NAME="AEN2042" HREF="#FTN.AEN2042" >[1]</A > There are a few variants of <B CLASS="COMMAND" >init</B > available. Most Linux distributions use <B CLASS="COMMAND" >sysvinit</B > (written by Miquel van Smoorenburg), which is based on the System V <B CLASS="COMMAND" >init</B > design. The BSD versions of Unix have a different <B CLASS="COMMAND" >init</B >. The primary difference is run levels: System V has them, BSD does not (at least traditionally). This difference is not essential. We'll look at <B CLASS="COMMAND" >sysvinit</B > only. </P ></DIV ><H3 CLASS="FOOTNOTES" >Notes</H3 ><TABLE BORDER="0" CLASS="FOOTNOTES" WIDTH="100%" ><TR ><TD ALIGN="LEFT" VALIGN="TOP" WIDTH="5%" ><A NAME="FTN.AEN2042" HREF="x2016.html#AEN2042" >[1]</A ></TD ><TD ALIGN="LEFT" VALIGN="TOP" WIDTH="95%" ><P ><B CLASS="COMMAND" >init</B > itself is not allowed to die. You can't kill <B CLASS="COMMAND" >init</B > even with SIGKILL. </P ></TD ></TR ></TABLE ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="init.html" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="x2051.html" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><B CLASS="COMMAND" >init</B ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="init.html" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Configuring <B CLASS="COMMAND" >init</B > to start <B CLASS="COMMAND" >getty</B >: the <TT CLASS="FILENAME" >/etc/inittab</TT > file</TD ></TR ></TABLE ></DIV ></BODY ></HTML >