![运行级别 0 和 6 是结果还是转换?](https://linux22.com/image/131567/%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB%200%20%E5%92%8C%206%20%E6%98%AF%E7%BB%93%E6%9E%9C%E8%BF%98%E6%98%AF%E8%BD%AC%E6%8D%A2%EF%BC%9F.png)
运行级别0和6的含义是关闭或重新启动系统。
如果我输入命令init 0
,系统将因此关闭。
然而我的问题是
- 如果系统正在关闭,因为它已成功更改为运行级别 0
- 或者如果我只触发从当前运行级别到运行级别 0 的更改(即告诉我的系统我想要进入运行级别 0),它将达到它后关闭?这是当然的绝不,因为系统断电后将不执行任何操作。
换句话说:系统是否处于运行级别0
- 尽管系统正在关闭(从运行到关闭的过渡期间),或者
- 后系统已关闭(作为描述结果的无法到达的运行级别)?
还有一个关于运行级别 6 的附加问题:系统在下次启动的任何阶段是否处于运行级别 6?
我对 Linux 的行为感兴趣(如果与 Unix 有什么区别的话)。
答案1
init
(无论您使用的是经典的 SVR4 风格init
、systemd、runit 还是其他)都被编码为状态机。它仅响应导致其状态改变的事件而执行操作。系统从开机到关机的转变是从当前状态到运行级别 0 定义的状态的变化,重新启动的关闭也是相同的,只是更改为运行级别 6 定义的状态(以及实际上,这两个转换几乎是相同的,除了最后一次调用内核init
)。
init
为了回答你的第二个问题,从调用内核重新启动(不会返回)到内核在下次启动期间将执行移交给“init”的这段时间里,系统功能处于“运行级别 6” 。