LInux开机过程

在 Init 作为内核引导序列的最后一步执行后,它会查找文件 /etc/inittab 以查看是否有 initdefault 类型的条目。

initdefault 条目确定系统的初始运行级别。
如果没有这样的条目(或者根本没有 /etc/inittab),则必须在系统控制台中输入运行级别。

运行级别 S 或者 s 使系统进入单用户模式并且不需要 /etc/inittab 文件。
在单用户模式下,在 /dev/console 上打开一个 root shell。

进入单用户模式时,init 从 /etc/ioctl.save 读取控制台的 ioctl 状态。

如果此文件不存在,init 以 9600 波特和 CLOCAL 设置初始化该行。
当 init 离开单用户模式时,它将控制台的 ioctl 设置存储在此文件中,以便它可以在下一个单用户会话中重用它们。

第一次进入多用户模式时,Init 执行引导和引导等待条目,以允许文件系统在用户登录之前挂载。
然后,所有条目匹配运行级别进程。

启动新进程时,Init 首先检查文件 /etc/initscript 是否存在。
如果是,它使用这个脚本来启动进程。

每次子进程终止时,Init 都会在 /var/run/utmp 和 /var/log/wtmp 中记录事实和死亡原因,前提是这些文件存在。

init 在启动时运行并启动所有后台进程

Init 是所有 Linux 进程的父进程。

它是计算机启动时第一个启动的进程,它一直运行到系统关闭。
它是所有其他进程的祖先。

它的主要作用是从存储在文件 /etc/inittab 中的脚本创建进程。
该文件通常存储导致 Init 在每一行产生 gettys 的条目,系统用户可以登录到这些条目。

它还控制任何特定系统所需的自主过程。

Linux 运行级别

运行级别是系统的软件配置,它只允许执行选定的一组进程。
Init 为这些运行级别中的每一个生成的进程在 /etc/inittab 文件中定义。
Init 支持八个运行级别:0 到 6 和 S 或者 s 。
当特权用户运行 Telinit 时,运行级别会发生变化, Telinit 会向 Init 发送适当的信号,告诉它要更改到哪个运行级别。

运行级别 0、1 和 6 是保留的。
运行级别 0 暂停系统,运行级别 6 重新启动系统,运行级别 1 强制系统进入单用户模式。

运行级别 S 不打算直接使用,而是由运行级别 1 启动时执行的脚本使用。

运行级别 7 到 9 是有效的但没有很好的文档记录,因为传统的 Unix 变体不使用它们。

运行级别 S 和 s 相同。

更改运行级别

在生成所有指定的进程后,Init 等待其后代进程之一死亡、电源故障信号或者直到 Telinit 发出信号以更改系统的运行级别。
当这三种情况之一发生时,它会重新检查 /etc/inittab 文件。
可以随时将新条目添加到此文件中。
但是,init 仍然会等待上述三个条件之一发生。
为了提供即时响应,Telinit Q 命令唤醒 Init 以重新检查 /etc/inittab 文件。

如果 Init 未处于单用户模式并收到电源故障信号,它会读取文件 /etc/powerstatus.conf 。

然后它根据这个文件的内容启动一个命令:

  • F (AIL ):电源故障,UPS 正在提供电源。执行 powerwait 和 powerfail 条目。
  • O (K ):电源已恢复,执行 powerokwait 条目。
  • L (OW ):电源故障,UPS 电池电量低。执行 powerfailnow 条目。

如果 /etc/powerstatus 不存在或者包含字母 F、O 或者 L 以外的任何内容,则 Init 的行为就像读取字母 F 一样。

现在不鼓励使用 SIGPWR 和 /etc/powerstatus。
在现代 Linux 发行版中使用 /dev/initctl 控制通道。

当 Init 被请求更改运行级别时,它会向所有在新运行级别中未定义的进程发送警告信号 SIGTERM。
然后等待五秒钟,然后使用 SIGKILL 信号强行终止这些进程。

如何在 Linux 中使用“init”命令

远程登录

Telinit 链接到 /sbin/init。
它接受一个字符参数并通知 Init 执行适当的操作。
以下参数用作 Telinit 的指令:

  • 0、1、2、3、4、5 或者 6 :切换到指定的运行级别。
  • a、b、c:仅处理那些具有运行级别 a、b 或者 c 的 /etc/inittab 文件条目。
  • Q 或者 q :重新检查 /etc/inittab 文件。
  • S 或者 s :切换到单用户模式。有时,单用户模式被称为恢复模式,因为它通常用于执行紧急系统修复。
  • U 或者 u :重新执行自身(保留状态)。不会重新检查 /etc/inittab 文件。运行级别应为 S、s、1、2、3、4 或者 5;否则,该请求将被静默忽略。

Telinit 还可以告诉 Init 在发送 SIGTERM 和 SIGKILL 信号的进程之间应该等待多长时间。

默认值为 5 秒,但可以使用 -t sec 选项更改此值。

Telinit 只能由具有适当权限的用户调用。

Init 二进制文件通过查看其进程 ID 来检查它是 Init 还是 Telinit。
真正的 Init 的进程 ID 始终为 1.
由此可知,一个人可以使用 Init 作为快捷方式而不是调用 Telinit 。

日期:2020-07-15 11:16:40 来源:oir作者:oir