我对如何在 Linux 中实现重启很感兴趣。当我按 ctrl-alt-del 或单击菜单栏中的“重新启动”时,接下来会发生什么?
谢谢!
我对如何在 Linux 中实现重启很感兴趣。当我按 ctrl-alt-del 或单击菜单栏中的“重新启动”时,接下来会发生什么?
谢谢!
以安全的方式关闭系统。所有登录的用户都会收到系统正在关闭的通知,并且 login(1) 被阻止。可以立即关闭系统或在指定的延迟后关闭系统。SIGTERM 信号首先通知所有进程系统正在关闭。它通过向 init 进程发出信号,要求它更改运行级别来完成其工作。运行级别 0 用于停止系统,运行级别 6 用于重新启动系统,运行级别 1 用于使系统进入可以执行管理任务的状态;所以基本上重新启动称为“关机”。
快速回答是 /etc/rc6.d 中的所有脚本都已执行。
以“K”开头的脚本使用“stop”参数执行。以“S”开头的脚本使用“start”参数执行。
有关更多信息,您可以在此处开始阅读有关运行级别的信息:http ://en.wikipedia.org/wiki/Runlevel
Linux 上有不同的 init 系统,它们还控制重新启动/关闭时发生的情况。请参阅https://unix.stackexchange.com/questions/18209/detect-init-system-using-the-shell以了解您正在使用哪个。
如果您使用的是 SysVinit,则存在与整个系统状态相关联的运行级别。init 系统将首先运行与当前运行级别相关的所有终止脚本,然后运行与运行级别 6 相关的启动脚本。如果当前运行级别为 5,它将运行 /etc/rc5.d/K* 然后 /etc/rc6 .d/S*。它们可能位于另一个目录中,例如 /etc/init.d/rc5.d/k*,具体取决于您的 Linux 发行版。
如果您使用的是 systemd,那么将有一个已定义目标和服务的列表,而不是一个整体的“运行级别”。目标列表本质上是一个运行级别。这些在 /etc/systemd 下的 .service 和 .target 文件中定义。那里可能会定义一个“reboot.target”,其他依赖于它的服务将在重新启动时运行。有关示例,请参阅systemd 主页或此stackexchange 问题。
一些 Ubuntu 版本也使用 upstart,但我认为在最近的版本中它已被 systemd 取代。如果您使用的是新贵,请参阅本指南或此 askubuntu 问题。
需要注意的一件事是,无论您使用哪个初始化系统,您都可能使用通常与另一个相关联的初始化脚本。因此,您可能正在使用 sysVinit,但某些 rc*.d 脚本可能是指向调用 systemd 脚本的事物的链接。或相反亦然。