{ telinit | init } { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | h | Q | q | S | s | M | m | N }
init 命令初始化并控制进程。其首要任务是基于从文件 /etc/inittab 读入的记录启动进程。/etc/inittab 文件通常请求 init 命令在用户可登录的每一行上运行 getty 命令。init 命令控制系统所需的独立进程。
组成 init 命令的进程分派操作的主要进程是 /usr/sbin/getty。/usr/sbin/getty 进程启动单独终端行。其它典型地由 init 命令分派的进程为守护进程和 shell。
链接到 init 命令的 telinit 命令,指引 init 命令的操作。 telinit 命令引用单字符参数并通过 kill 子例程发出 init 命令从而执行适当的操作。
telinit 命令将系统设置在一特定的运行级别上。运行级别是允许仅选中的进程组存在的软件配置。系统可以在下列的运行级别之一上:
下列参数也作为 init 命令的伪指令:
当系统启动时,当根文件系统已在预初始化过程之中安装,则发生下列事件序列:
如请求 init 命令改变运行级别,init 命令读 /etc/inittab 文件以识别应当存在于新运行级别的进程。 然后,init 命令取消所有不应该运行在新级别上的进程,并启动所有应该运行在新级别上的进程。
在这些运行级别的每一级别上由 init 命令运行的进程定义在文件 /etc/inittab 之中。通过让 root 用户运行 telinit 命令来改变运行级别,该命令链接到 init 命令。该用户运行的 init 命令向在系统启动时初始化的原始 init 命令发送适当的信号。缺省运行级别可通过修改 /etc/inittab 文件中 initdefault 项的运行级别来更改。
在维护运行级别, /dev/console 控制台终端对读写开放。提示输入 root 密码。当成功输入 root 用户密码时,su 被调用。有两种方法可以退出维护运行级别:
在系统试图启动时,init 命令提示输入一个新运行级别(initdefault 为维护时)的明显失败的原因可能是终端控制台设备(/dev/console) 被转换到一个并非物理控制台的设备上。倘若如此,而您希望在物理控制台而非 /dev/console 上工作,可以通过按物理控制台设备上的 DEL(删除)键强制 init 命令转换到物理控制台。
当 init 命令提示输入一个新的运行级别,输入 0 到 9 中的任一位或以下任一字母 S、s、M 或 m。如果输入的是 S 、s、M 或 m,init命令以维护方式操作,其额外结果是:如果此前控制被强制转换到物理控制台,/dev/console 文件也被转换到该设备。init 命令生成一条消息到 /dev/console 文件事先已连接到的设备上。
如果您输入了 0 到 9 运行级别,init 命令进入相应的运行级别。init 命令拒绝任何其它输入并重新提示您输入正确值。 如果这是 init 命令第一次进入任意运行级别而非维护级别,它搜索/etc/inittab 文件中的带 boot 或 bootwait 关键字的条目。如果init 命令找到了这些关键字,它执行相应的任务,假如输入的运行级别与条目的运行级别相匹配的话。例如,如果init 命令找到 boot 关键字,它引导机器。系统的任意特定的初始化,诸如检测和安装文件系统,都发生在系统允许任何用户操作之前。然后 init 命令扫描 /etc/inittab 文件查找为该运行级别处理的所有条目。接着它继续 /etc/inittab 文件的正常处理。
运行级别 2 缺省定义为包含运行在多用户环境的所有终端进程和守护进程。在多用户环境中,/etc/inittab 文件被设置以使得 init 命令为系统的每一终端创建进程。
对终端进程而言,shell 终止是因为一明确输入的文件结束符,或断开连接。当 init 命令收到一个进程已中止的信号,它在 /etc/utmp 文件和 /var/adm/wtmp 文件之中记录该事实及其原因。/var/adm/wtmp 文件记录已启动的进程的历史。
要在 /etc/inittab 文件之中启动每一进程,init 命令等待其一后继过程停止,等待一电源故障信号 SIGPWR,或直到 init 命令由 init 或 telinit 命令发出以改变系统的运行级别。当上述三个条件之一发生时, init 命令重新检查 /etc/inittab 文件。即使已经有新的条目添加到 /etc/inittab 文件,init 命令仍在等待三个条件之一的发生。为提供瞬时响应,请运行 telinit -q 命令来重新检查 /etc/inittab 文件。
如果 init 命令发现其连续在文件 /etc/inittab 中运行一个条目( 225 秒内超过 5 次),它假定在条目命令字符串中存在一个错误。然后它打印一个出错信息到控制台,并在系统出错日志中记录一个错误。发送该消息后,60 秒内该条目不运行。如果该错误继续发生,该命令将每 240 秒仅重新生成该条目 5 次。init 命令继续假定出错,直到该命令在时间间隔内 5 次不响应,或直到其收到一个用户的信号。init 命令仅在错误第一次出现时记录该错误。
当 telinit 命令请求 init 命令改变运行级别, init 命令向当前运行级别内未定义的所有进程发送一个 SIGTERM 信号。在以信号 SIGKILL 中止这些进程前,init 命令等待 20 秒。
如果 init 命令收到一个 SIGPWR 信号,且不在维护方式下,它扫描 /etc/inittab 文件查找特定的电源故障条目。在任何其它进一步的进程运行之前,init 命令调用与这些条目关联的任务(如果运行级别允许的话)。按这个方法,无论何时系统遇到电源故障,init 命令都可以执行 清除和记录功能。需要注意的是,这些电源故障条目不应该使用最先初始化的设备。
因为 init 命令是系统每个进程的终极祖先,系统的每一其它进程继承该 init 命令的环境变量。作为其初始化序列的一部分,init 命令读 /etc/environment 文件,并将该文件中发现的任一赋值复制到传递给其所有子进程的环境中。因为 init 子进程在注册会话中不运行,它们不继承 init 命令的 umask 设置。这些进程可以设置 umask 为任意它们所需要的值。/etc/inittab 文件中的由 init 执行的命令使用 init 的 ulimit 值而非 /etc/security/limits 中所给出的缺省值。结果为由命令行成功执行的命令在由 init 调用时可能执行不正确。任何有特殊 ulimit 需要的命令应包含特定的操作以设置为所需要的 ulimit 值。
/etc/inittab | 指定 init 命令控制文件。 |
/etc/utmp | 指定登录用户的记录。 |
/var/adm/wtmp | 指定永久登录帐户文件。 |
/sbin/rc.boot | 指定预初始化命令文件。 |
/etc/rc | 指定初始化命令文件。 |
/etc/environment | 指定系统环境变量。 |
/dev/console | 指定控制台设备驱动程序。 |
chitab 命令、lsitab 命令、mkitab 命令、rmitab 命令、getty 命令、rc 命令。
reboot 子例程、 umask 子例程、 ulimit 子例程、 kill 子例程。