.\"; 中文版版权所有 soloman, Laser www.linuxforum.net 2000 .TH INIT 8 "11 February 2000" "" "Linux 系统管理员手册" .SH NAME init, telinit \- 进程处理初始化 .SH 总览 .B /sbin/init .RB [ " -a " ] .RB [ " -s " ] .RB [ " -b " ] .RB [ " -z xxx " ] .RB [ " 0123456Ss " ] .br .B /sbin/telinit .RB [ " \-t 秒 " ] .RB [ " 0123456sSQqabcUu " ] .SH 描述 .SS Init .B Init 是所有进程的父进程。它的首要任务是从一个存储在文件 \fB/etc/inittab\fP (参阅 \fIinittab\fP(5)) 里面的脚本里创建进程。 这个文件通常有一些令 \fBinit\fP 在每条用户可登录的线上派生 \fBgetty\fP 的记录. 它同时也控制着各独特系统所要求的独立进程。 .SH 运行级别 所谓 \fI运行级别\fP 是一种系统软件环境配置, 在此特定的环境中只允许某一组选定的进程存在。 \fBinit\fP 给不同的运行级别派生的进程在 \fB/etc/inittab\fP 文件中定义。 \fBInit\fP 可以启动到8个不同的运行级别上: \fB0\(en6\fP 和 \fBS\fP 或 \fBs\fP。运行级别可以由超级用户通过 \fBtelinit\fP 命令来转换,此命令可以将转换信号传递给 \fBinit\fP, 告诉它切换到哪个运行级别。 .PP 运行级别 \fB0\fP,\fB1\fP,和 \fB6\fP 为系统保留的专用运行级别。 运行级别 0 用来关机,运行级别 6 用来重启计算机, 运行级别 1 用来使计算机进入单用户模式。 运行级别 \fBS\fP 不是给我们直接使用的, 更多是为进入运行级别 1 时运行某些可执行脚本时被调用。 如果想得到更多相关的信息,请参阅手册页 \fBshutdown\fP(8) 和 \fBinittab\fP(5)。 .PP 运行级别 7-9 虽然在文档中说明,但也可以使用。 不使用它们的原因只是因为"传统" Unix 变种不使用这些运行级别。 另外,运行级别 \fIS\fP 和运行级别 \fIs\fP 实际上是相同的, 它们只是系统内同一运行级别的两个不同的别名而己。 .SH 系统引导 .PP 当系统内核引导到最后一步时, \fBinit\fP 进程被启动, 它会自动查找 \fB/etc/inittab\fP 文件,看看是否有类型为 \fBinitdefault\fP (参阅 \fIinittab\fP(5))的记录. \fBinitdefault\fP 记录决定系统初始运行级别。 如果没有这条记录(或者根本就没有 \fB/etc/inittab\fP ), 那么,你必须在系统控制台输入想要进入的运行级别。 .PP 运行级别 \fBS\fP 或 \fBs\fP 把系统带入单用户模式, 此模式不需要 \fB/etc/initttab\fP 文件。单用户模式中, \fB/sbin/sulogin\fP 会在 \fB/dev/console\fP 这个设备上打开。 .PP 当进入单用户模式后, \fBinit\fP 会从文件 \fB/etc/ioctl.save\fP 中读取控制台的 \fIioctl\fP(2) 状态。如果该文件不存在, \fBinit\fP 则把线路设定为 \fB9600 baud\fP 并且带有 \fBCLOCAL\fP。 当 \fBinit\fP 退出单用户模式时, 它会自当前的控制台的 \fIioctl\fP 设置存储到这个文件供下次使用。 .PP 当第一次进入多用户模式时,\fBinit\fP 会执行\fBboot\fP 和 \fBbootwait\fP 记录以便在用户可以登录之前挂载文件系统。 然后再执行相应运指定的各进程。 .PP 当启动一个新的进程时, \fBinit\fP 会检查是否存在 \fI/etc/initscript\fP 文件。 如果存在该文件,则使用该脚本来启动该进程。 .PP 如果系统中存在文件 \fB/var/run/utmp\fP 和 \fB/var/log/wtmp\fP, 那么当每个子进程终止时,\fBinit\fP 会将终止信息和原因记录进这两个文件中。 .SH 改变运行级别 .PP 当 \fBinit\fP 启动了所有指定的子进程后, 它会不断地侦测系统进程情况,如:它的某个子进程被终止、电源失效、或由 \fBtelinit\fP 发出的改变运行级别的信号。当它接受到以上的这些信号之一时, 它会自动重新扫描 \fB/etc/inittab\fP 文件,并执行相应操作。 所以,新的记录可以随时加入到此文件中。 并且, \fBinit\fP 仍然等待系统发出了上述信号。 在更新了各种系统文件后,如果你希望得到即时的更新, 你可以使用\fBtelinit Q\fP 或 \fBq\fP 命令来唤醒 \fBinit\fP 让它即刻重新检测\fB/etc/inittab\fP 文件。 .PP 如果 \fBinit\fP 不是在单用户模式并且接收到了一个电源失效信号(SIGPWR), 它会读取文件 \fB/etc/powerstatus\fP,并执行该文件中指定的各种操作: .IP F(AIL) 电源失效,由 UPS 提供电力。执行 \fBpowerwait\fP 和 \fBpowerfail\fP 记录。 .IP O(K) 电源恢复,执行 \fBpowerokwait\fP 记录。 .IP L(OW) 电源失效并且 UPS 电压也太低。执行 \fBpowerfailnow\fP 记录。 .PP 如果文件 /etc/powrestatus 不存在或其中的内容并不包含有以上所示的字母 \fBF\fP,\fBO\fP 或 \fBL\fP ,则 init 会当做读到了字母 \fBF\fP。 .PP 我们不赞成使用 \fBSIGPWR\fP 和 \fB/etc/powerstatus\fP 。 有些用户希望与 \fBinit\fP 进行交互,那么可以使用 \fB/dev/initctl\fP 控制通道。关于此点的描述请参阅 \fBsysvinit\fP 包的源代码。 .PP 当 \fBinit\fP 得到更新运行级别的请求, init会向所有没有在新运行级别中定义的进程发送一个警告信号 \s-1\fBSIGTERM\fP\s0 。 在等待 5 秒钟之后,它会发出强制中断所有进程的运行的信号 \s-1\fBSIGKILL\fP\s0 。 注意, \fBinit\fP 假设所有的这些进程(包括它们的后代)都仍然在 \fBinit\fP 最初创建它们的同一进程组里。 如果有任何进程改变了它们的进程组,那么它就收不到这些信号。 这样的进程,你需要分别进行手工的终止。 .SH TELINIT \fB/sbin/telinit\fP 是一个到 .BI /sbin/init 的软链接。 它用一个单字符参数来通知 \fBinit\fP 执行相应的操作。 下面是相关的参数: .IP "\fB0\fP,\fB1\fP,\fB2\fP,\fB3\fP,\fB4\fP,\fB5\fP 或 \fB6\fP" 通知 \fBinit\fP 将运行级别切换到指定的运行级别 .IP \fBa\fP,\fBb\fP,\fBc\fP 告诉 \fBinit\fP 只运行那些 \fB/etc/inittab\fP 文件中 运行级别是 \fBa\fP,\fBb\fP 或 \fBc\fP 的记录 .IP "\fBQ\fP 或 \fBq\fP" 通知 \fBinit\fP 重新检测 \fB/etc/inittab\fP 文件 .IP "\fBS\fP 或 \fBs\fP" 通知 \fBinit\fP 将运行级别切换到单用户模式下 .IP "\fBU\fP 或 \fBu\fP" 通知 \fBinit\fP 自动重启(保留状态), 此操作不会对文件\fB/etc/inittab\fP 进行重新检测。 执行此操作时,运行级别必须处在 \fBSs12345\fP 之一,否则,该请求将被忽略 .PP \fBtelinit\fP 还可以告诉 \fBinit\fP 两次发送 SIGTERM 和 SIGKILL 信号的时间间隔。 默认值是 5 秒,你可以通过使用 \fB-t sec\fP 的选项来修改。 .PP \fBtelinit\fP 只能由具有恰当权限的用户执行。 .PP \fBinit\fP 通过检查自己的 \fI 进程号\fP 来判断自己是 \fBinit\fP 还是 \fBtelinit\fP ;真的 \fBinit\fP 的进程号永远都是 \fB1\fP。 从这一点来看,我们在调用 \fBtelinit\fP 时也可以只使用 \fBinit\fP 来少敲几个键. .SH 环境变量 .PP \fBInit\fP 为所有的子进程设定下列环境变量 .IP \fBPATH\fP \fI/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin\fP .IP \fBINIT_VERSION\fP 如名字表示的那样.在决定一个脚本是否直接来自 \fBinit\fP 时很有用 .IP \fBRUNLEVEL\fP 当前系统的运行级别 .IP \fBPREVLEVEL\fP 前次运行的运行级别(仅当改变运行级别时有用) .IP \fBCONSOLE\fP 系统控制台。此变量是由内核继承而来,如果没有此环境变量的定义, \fBinit\fP 会使用 \fB/dev/console\fP 做为默认的控制台 .SH 启动标志 在启动系统时可以通过引导管理器(比如,LILO)传递一些启动标志给 \fBinit\fP , \fBInit\fP 接受下面几个: .TP 0.5i .B -s, S, single 以单用户模式启动系统。按这种模式启动时, \fI/etc/inittab\fP 需要被检查, 并在单用户模式 shell 启动之前会执行引导 rc 脚本。 .PP .TP 0.5i .B 1-5 定义需要启动的运行级别 .PP .TP 0.5i .B -b, emergency 不运行任何启动脚本而直接进入单用户模式 shell .PP .TP 0.5i .B -a, auto 如果用缺省命令行从内核引导(没有用户干预), LILO 引导管理器向命令行增加了单词 \"auto\". 如果是这样的话, \fBinit\fP 把环境变量 \"AUTOBOOT\" 设置为 \"yes\". 请注意你不能将这个东西用于任何安全评测 - 用户当然可以在命令行上 手工输入 \"auto\" 或 \-a . .PP .TP 0.5i .B -z xxx -z 参数被忽略.你可以用这个选项略微扩展命令行, 这样它可以在堆栈里获得更多空间.然后 \fBInit\fP 就可以操作命令行, 好让 \fBps\fP(1) 显示当前运行级别. .SH 接口 init监听 /dev 里的一个 \fIfifo\fP ,\fI/dev/initctl\fP,从中获取信息。 \fBTelinit\fP 也使用这些和 init 进行通信。 该界面没有完整的文档。 如果对 init 有兴趣,则可以学习 \fIsrc/\fP 目录中 \fBinit\fP 源文件包中的 \fIinitreq.h\fP 文件。 .SH 信号 init 对以下信号产生响应 .TP 0.5i .B SIGHUP 当接收到该信号后,init会对 .I /etc/initrunlvl 和 .I /var/log/inirunlvl 文件进行检查。如果这两个文件之一存在而且文件中有 ASCII 字符的运行级别, init 会转换到相应的新的运行级别。 \fI 此特性只用于向后兼容! \fP . 通常的情况是该文件并不存在,所以 init 执行类似于 \fB telinit q\fP 这样的操作。 .PP .TP 0.5i .B SIGUSR1 当接收到这个信号量,init 会关闭并重新打开它的控制 fifo,\fB/dev/initctl\fP。 此操作对 /dev 被重新挂载后的启动脚本有用。 .TP 0.5i .B SIGINT 通常,当用户按了 CTRL-ALT-DEL 键后,内核会向 init 传递此信号。 它所执行的操作与 \fIctrlaltdel\fP 相同。 .TP 0.5i .B SIGWINCH 当键盘有 \fIKeyboardSignal\fP 按键按下时,内核向 init 传递此信号, 它激活 \fIkbrequest\fP 动作. .SH 遵循 \fBInit\fP 与 System V 的 init 相兼容。 它与\fI/etc/init.d\fP 和 \fI/etc/rc{runlevel}.d\fP 目录下的脚本紧密地工作在一起。 如果你的系统使用这种惯例,在 \fI/etc/init.d\fP 目录下应该有一个 \fIREADME\fP 文件,它可以很好地解释了这些脚本是如何工作的。 .SH 相关文件 .nf /etc/inittab /etc/initscript /dev/console /etc/ioctl.save /var/run/utmp /var/log/wtmp /dev/initctl .fi .SH 警告 \fBInit\fP 假设进程和进程的后代同属于最初创建它们的进程组. 如果进程改变了它们的进程组, \fBinit\fP 就无法中止它们,因此,你可能会有两个进程读取一条终端线. .SH 诊断 如果 \fBinit\fP 发现它的重启次数在最近 2 分钟里超过了 10 次, 它就会认为程序命令串出错了。在系统控制台输出出错信息,并拒绝重新启动, 只有等到 5 分钟以后或用户给 init 一个特定的信号, 它才会重新响应。 这可以防止由于用户在编辑 \fB/etc/inittab\fP 文件时可能出现的输入错误 或由于相关程序被无意删除后导致的大量占用系统资源。 .SH 作者 Miquel van Smoorenburg (miquels@cistron.nl) 原始帮助手册页作者:Michael Haardt (u31b3hs@pool.informatik.rwthaachen.de). .SH 另见 .BR getty (1), .BR login (1), .BR sh (1), .BR who (1), .BR shutdown(8), .BR kill (1), .BR inittab (5), .BR initscript (5), .BR utmp (5) .PP .SH "[中文版维护人]" .B 所罗门 .SH "[中文版最新更新]" 2000/11/26 .SH "[中国 Linux 论坛 man 手册页翻译计划]" .BI http://cmpp.linuxforum.net