个性化阅读
专注于IT技术分析

Linux init命令

本文概述

这是内核在系统引导期间执行的第一个进程。它是一个守护进程, 一直运行到系统关闭为止。因此, 它是所有流程的父级。首先, init读取存储在文件/ etc / inittab中的脚本。命令初始化读取初始配置脚本, 该脚本基本上负责系统在系统初始化时所做的所有事情, 例如设置时钟, 初始化串行端口等。

通过读取此文件, init可以确定应如何在每个运行级别中设置系统并设置默认运行级别。

在确定系统的默认运行级别之后, init会启动运行系统所需的所有后台进程。首先, 它使用stop参数运行每个kill脚本(它们的文件名以K开头)。然后, 它将运行所有启动脚本(它们的文件名以S开头)以启动所有服务和应用程序。


运行级别

运行级别是Linux系统的软件配置, 该配置仅允许存在选定的一组进程。它定义了系统上正在运行的服务。

运行级别由数字标识。 init可以是八个运行级别之一。它由特权用户运行telinit更改, 该运行会向init发送适当的信号以更改运行级别。

Runlevel Function
0 停止系统
1 单用户模式
2 无网络的多用户模式
3 带网络的多用户模式
4 Not used
5 具有网络和X Windows的多用户
6 重新启动系统
S/s 不直接使用
  • 0, 1和6是保留的运行级别。
  • 运行级别S或s相同。
  • 7-9也是有效的运行级别, 尽管没有将它们记录为传统的Unix变体, 请不要使用它们。但是它们与运行级别S或s相同。它们是别名。

更改运行级别

有许多更改运行级别的方法。要永久进行更改, 请在文件/ etc / inittab中更改默认级别。

在所有进程之后, init会等待其后代进程之一死亡, 以获取电源故障信号。或等待telinit发出信号以更改运行级别。当发生上述情况时, 它将重新检查/ etc / inittab文件。可以随时将新条目添加到该文件。

当init不在单用户模式下并且收到电源故障信号(SIGPWR)时, 它将读取文件/ etc / powerstatus。根据该文件的内容, init启动一个命令:

  • F(失败)?当电源出现故障时, UPS将提供电源。执行powerfail和powerwait条目。
  • O(好)?电源已恢复, 执行powerokwait条目。
  • L(低)?电源降级, UPS电池电量低, 执行powerfailnow条目。

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

要与init进行交互, 应使用/ dev / initctl控制通道, 而不是SIGPWR和/ etc / powerstatus。

当将更改运行级别的请求发送到init时, init会向新运行级别中的所有未定义进程发送警告信号SIGTERM。然后等待5秒钟, 然后通过SIGKILL强制终止进程。

所有这些进程应保留在由初始化程序创建的同一进程组中, 否则它们将无法接收这些信号, 因此需要分别终止。


Telinit

/ sbin / telinit与/ sbin / init链接在一起。 Telinit接受一个参数并发信号通知init以执行相应的功能。

参数如下, 每个参数一个字符:

Argument Function
0, 1, 2, 3, 4, 5, 6 切换到指定的运行级别
a, b, c 仅处理运行级别为a, b, c的/ etc / inittab中的文件条目。
Q或q 重新检查文件/ etc / inittab
S或s 切换到单用户模式
你或你 init重新执行本身。没有重新检查发生, 运行级别应从S, s, 1, 2, 3, 4, 5开始, 否则请求将被忽略。

在发送信号SIGTERM和SIGKILL之间等待的默认时间为5秒, 但是telinit也可以使用-t sec选项要求init更改此时间。

只有具有适当特权的用户才能执行telinit。

init二进制文件通过进程ID检查它是init还是telinit, init的进程ID始终为1。因此, 也可以使用init代替telinit作为快捷方式。

赞(0)
未经允许不得转载:srcmini » Linux init命令

评论 抢沙发

评论前必须登录!