运行级别 0 和 6 是结果还是转换?

运行级别 0 和 6 是结果还是转换?

运行级别0和6的含义是关闭或重新启动系统。

如果我输入命令init 0,系统将因此关闭。

然而我的问题是

  1. 如果系统正在关闭,因为它已成功更改为运行级别 0
  2. 或者如果我只触发从当前运行级别到运行级别 0 的更改(即告诉我的系统我想要进入运行级别 0),它将达到它关闭?这是当然的绝不,因为系统断电后将不执行任何操作。

换句话说:系统是否处于运行级别0

  • 尽管系统正在关闭(从运行到关闭的过渡期间),或者
  • 系统已关闭(作为描述结果的无法到达的运行级别)?

还有一个关于运行级别 6 的附加问题:系统在下次启动的任何阶段是否处于运行级别 6?

我对 Linux 的行为感兴趣(如果与 Unix 有什么区别的话)。

答案1

init(无论您使用的是经典的 SVR4 风格init、systemd、runit 还是其他)都被编码为状态机。它仅响应导致其状态改变的事件而执行操作。系统从开机到关机的转变是从当前状态到运行级别 0 定义的状态的变化,重新启动的关闭也是相同的,只是更改为运行级别 6 定义的状态(以及实际上,这两个转换几乎是相同的,除了最后一次调用内核init)。

init为了回答你的第二个问题,从调用内核重新启动(不会返回)到内核在下次启动期间将执行移交给“init”的这段时间里,系统功能处于“运行级别 6” 。

相关内容