Provided by: manpages-zh_1.5.1-3_all bug

NAME

       init, telinit - 进程处理初始化

览
       /sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
       /sbin/telinit [ -t ] [ 0123456sSQqabcUu ]

述
   Init
       Init   是所有进程的父进程。它的首要任务是从一个存储在文件  /etc/inittab
       (参阅 inittab(5))  里面的脚本里创建进程。  这个文件通常有一些令  init
       在每条用户可登录的线上派生                getty                的记录.
       它同时也控制着各独特系统所要求的独立进程。

别
       所谓                                   是一种系统软件环境配置,
       在此特定的环境中只允许某一组选定的进程存在。                       init
       给不同的运行级别派生的进程在     /etc/inittab     文件中定义。     Init
       可以启动到8个不同的运行级别上:        0-6Ss。运行级别可以由超级用户通过                                   telinit
       命令来转换,此命令可以将转换信号传递给                           init,
       告诉它切换到哪个运行级别。

       运行级别   01,和    6    为系统保留的专用运行级别。    运行级别    0
       用来关机,运行级别       6       用来重启计算机,       运行级别      1
       用来使计算机进入单用户模式。    运行级别    S    不是给我们直接使用的,
       更多是为进入运行级别          1          时运行某些可执行脚本时被调用。
       如果想得到更多相关的信息,请参阅手册页 shutdown(8) 和 inittab(5)。

       运行级别    7-9     虽然在文档中说明,但也可以使用。     不使用它们的-
       因只是因为"传统"   Unix   变种不使用这些运行级别。   另外,运行级别   S
       和运行级别                      s                      实际上是相同的,
       它们只是系统内同一运行级别的两个不同的别名而己。

导
       当系统内核引导到最后一步时,     init     进程被启动,     它会自动查找
       /etc/inittab      文件,看看是否有类型为       initdefault       (参阅
       inittab(5))的记录.       initdefault       记录决定系统初始运行级别。
       如果没有这条记录(或者根本就没有           /etc/inittab            ),
       那么,你必须在系统控制台输入想要进入的运行级别。

       运行级别  Ss  把系统带入单用户模式,  此模式不需要  /etc/initttab
       文件。单用户模式中, /sbin/sulogin 会在  /dev/console 这个设备上打开。

       当进入单用户模式后,  init  会从文件   /etc/ioctl.save   中读取控制台的
       ioctl(2)   状态。如果该文件不存在,   init   则把线路设定为  9600  baud
       并且带有 CLOCAL。 当 init 退出单用户模式时, 它会自当前的控制台的 ioctl
       设置存储到这个文件供下次使用。

       当第一次进入多用户模式时,init       会执行bootbootwait
       记录以便在用户可以登录之前挂载文件系统。 然后再执行相应运指定的各进程。

       当启动一个新的进程时,   init   会检查是否存在  /etc/initscript  文件。
       如果存在该文件,则使用该脚本来启动该进程。

       如果系统中存在文件       /var/run/utmp/var/log/wtmp,
       那么当每个子进程终止时,init 会将终止信息和砸蚣锹冀饬礁鑫募中。

别
       当                    init                   启动了所有指定的子进程后,
       它会不断地侦测系统进程情况,如:它的某个子进程被终止、电源失效、或由
       telinit      发出的改变运行级别的信号。当它接受到以上的这些信号之一时,
       它会自动重新扫描          /etc/inittab           文件,并执行相应操作。
       所以,新的记录可以随时加入到此文件中。            并且,           init
       仍然等待系统发出了上述信号。
       在更新了各种系统文件后,如果你希望得到即时的更新,  你可以使用telinit Qq 命令来唤醒 init 让它即刻重新检测/etc/inittab  文件。

       如果   init    不是在单用户模式并且接收到了一个电源失效信号(SIGPWR),
       它会读取文件 /etc/powerstatus,并执行该文件中指定的各种操作:

       F(AIL) 电源失效,由 UPS 提供电力。执行 powerwaitpowerfail 记录。

       O(K)   电源恢复,执行 powerokwait 记录。

       L(OW)  电源失效并且 UPS 电压也太低。执行 powerfailnow 记录。

       如果文件   /etc/powrestatus  不存在或其中的内容并不包含有以上所示的字母
       FOL ,则 init 会当做读到了字母 F。

       我们不赞成使用  SIGPWR/etc/powerstatus  。  有些用户希望与   init
       进行交互,那么可以使用    /dev/initctl   控制通道。关于此点的描述请参阅
       sysvinit 包的源代码。

       当                    init                     得到更新运行级别的请求,
       init会向所有没有在新运行级别中定义的进程发送一个警告信号   SIGTERM   。
       在等待  5  秒钟之后,它会发出强制中断所有进程的运行的信号  SIGKILL   。
       注意,     init    假设所有的这些进程(包括它们的后代)都仍然在    init
       最初创建它们的同一进程组里。
       如果有任何进程改变了它们的进程组,那么它就收不到这些信号。
       这样的进程,你需要分别进行手工的终止。

TELINIT

       /sbin/telinit 是一个到 /sbin/init  的软链接。  它用一个单字符参数来通知
       init 执行相应的操作。 下面是相关的参数:

       0,1,2,3,4,56
              通知 init 将运行级别切换到指定的运行级别

       a,b,c  告诉  init  只运行那些  /etc/inittab 文件中 运行级别是 abc
              的记录

       Qq 通知 init 重新检测 /etc/inittab 文件

       Ss 通知 init 将运行级别切换到单用户模式下

       Uu 通知  init  自动重启(保留状态),  此操作不会对文件/etc/inittab
              进行重新检测。       执行此操作时,运行级别必须处在      Ss12345
              之一,否则,该请求将被忽略

       telinit 还可以告诉 init 两次发送 SIGTERM  和  SIGKILL  信号的时间间隔。
       默认值是 5 秒,你可以通过使用 -t sec 的选项来修改。

       telinit 只能由具有恰当权限的用户执行。

       init  通过检查自己的   来判断自己是 init 还是 telinit ;真的 init
       的进程号永远都是 1。  从这一点来看,我们在调用  telinit  时也可以只使用
       init 来少敲几个键.

量
       Init 为所有的子进程设定下列环境变量

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

       INIT_VERSION
              如名字表示的那样.在决定一个脚本是否直接来自 init 时很有用

       RUNLEVEL
              当前系统的运行级别

       PREVLEVEL
              前次运行的运行级别(仅当改变运行级别时有用)

       CONSOLE
              系统控制台。此变量是由内核继承而来,如果没有此环境变量的定义,
              init 会使用 /dev/console 做为默认的控制台

志
       在启动系统时可以通过引导管理器(比如,LILO)传递一些启动标志给 initInit 接受下面几个:

       -sSsingle
            以单用户模式启动系统。按这种模式启动时, /etc/inittab 需要被检查,
            并在单用户模式 shell 启动之前会执行引导 rc 脚本。

       1-5  定义需要启动的运行级别

       -b, emergency
            不运行任何启动脚本而直接进入单用户模式 shell

       -a, auto
            如果用缺省命令行从内核引导(没有用户干预),                  LILO
            引导管理器向命令行增加了单词   如果是这样的话,   init  把环境变量
            请注意你不能将这个东西用于任何安全评测  -   用户当然可以在命令行上
            手工输入

       -z xxx
            -z                    参数被忽略.你可以用这个选项略微扩展命令行,
            这样它可以在堆栈里获得更多空间.然后 Init 就可以操作命令行,  好让
            ps(1) 显示当前运行级别.

口
       init监听  /dev  里的一个  fifo/dev/initctl,从中获取信息。  Telinit
       也使用这些和  init  进行通信。   该界面没有完整的文档。   如果对   init
       有兴趣,则可以学习 src/ 目录中 init 源文件包中的 initreq.h 文件。

号
       init 对以下信号产生响应

       SIGHUP
            当接收到该信号后,init会对  /etc/initrunlvl/var/log/inirunlvl
            文件进行检查。如果这两个文件之一存在而且文件中有             ASCII
            字符的运行级别, init 会转换到相应的新的运行级别。
             !   .  通常的情况是该文件并不存在,所以 init
            执行类似于
             telinit q 这样的操作。

       SIGUSR1
            当接收到这个信号量,init                  会关闭并重新打开它的控制
            fifo,/dev/initctl。 此操作对 /dev 被重新挂载后的启动脚本有用。

       SIGINT
            通常,当用户按了  CTRL-ALT-DEL  键后,内核会向  init  传递此信号。
            它所执行的操作与 ctrlaltdel 相同。

       SIGWINCH
            当键盘有  KeyboardSignal  按键按下时,内核向   init   传递此信号,
            它激活 kbrequest 动作.

裱
       Init    与    System    V   的   init   相兼容。   它与/etc/init.d/etc/rc{runlevel}.d                      目录下的脚本紧密地工作在一起。
       如果你的系统使用这种惯例,在    /etc/init.d   目录下应该有一个   README
       文件,它可以很好地解释了这些脚本是如何工作的。

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

告
       Init                   假设进程和进程的后代同属于最初创建它们的进程组.
       如果进程改变了它们的进程组,                                       init
       就无法中止它们,因此,你可能会有两个进程读取一条终端线.

断
       如果   init   发现它的重启次数在最近    2    分钟里超过了    10    次,
       它就会认为程序命令串出错了。在系统控制台输出出错信息,并拒绝重新启动,
       只有等到  5  分钟以后或用户给  init  一个特定的信号,  它才会重新响应。
       这可以防止由于用户在编      /etc/inittab      文件时可能出现的输入错误
       或由于相关程序被无意删除后导致的大量占用系统资源。

者
       Miquel  van Smoorenburg (miquels@cistron.nl) 允及镏植嵋匙髡撸篗ichael
       Haardt  (u31b3hs@pool.informatik.rwthaachen.de).

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

[<solomen@email.com.cn>

[[Linux man]
       http://cmpp.linuxforum.net

                               11 February 2000                        INIT(8)