当我发出sudo telinit n
(n 是新的运行级别)时会发生什么?init
扫描/etc/inittab
和系统启动时的操作是否完全相同?例如,如果我有
rm:2345:wait:/etc/rc.multi
在我的 中inittab
,我将运行级别从 5 更改为 3。它会/etc/rc.multi
重新执行还是被跳过?
答案1
我对改变运行级别的理解是init
“区分”新旧运行级别并启动/杀死状态将改变的服务。
在给定的示例中,/etc/rc.multi
不会重新执行,因为它已在运行。如果您rm:45:wait:/etc/rc.multi
在 中/etc/inittab
,并从运行级别 5 -> 3 -> 5,/etc/rc.multi
则会被终止(-> 3)然后启动(-> 5),因为它未针对运行级别 3 进行设置。
来自手册页:
当 init 被要求更改运行级别时,它会向新运行级别中未定义的所有进程发送警告信号 SIGTERM。然后等待 5 秒钟,然后通过 SIGKILL 信号强制终止这些进程。
/etc/inittab
按照您描述的方式重新扫描:
在生成所有指定进程后,init 将等待其子进程之一终止、电源故障信号或直到 telinit 发出信号更改系统的运行级别。当上述三种情况之一发生时,它会重新检查 /etc/inittab 文件。可以随时将新条目添加到此文件。但是,init 仍会等待上述三种情况之一发生。